def __init__(self, *args, **kwargs): super(ISBNForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.layout = Layout( Row(Column('isbn', css_class='form-group col-lg-4 mb-0'), css_class='form-row'), Submit('submit', '検索'))
class TapForm(forms.ModelForm): class FlowMeterModelChoiceField(forms.ModelChoiceField): def label_from_instance(self, meter): if meter.tap: return u'{} (connected to {})'.format(meter, meter.tap.name) else: return unicode(meter) class FlowToggleModelChoiceField(forms.ModelChoiceField): def label_from_instance(self, toggle): if toggle.tap: return u'{} (connected to {})'.format(toggle, toggle.tap.name) else: return unicode(toggle) class ThermoSensorModelChoiceField(forms.ModelChoiceField): def label_from_instance(self, sensor): last_log = sensor.LastLog() if last_log: return u'{} (Last report: {})'.format(sensor, naturaltime(last_log.time)) else: return unicode(sensor) meter = FlowMeterModelChoiceField(queryset=ALL_METERS, required=False, empty_label='Not connected.', help_text='Tap is routed thorough this flow meter. If unset, reporting is disabled.') toggle = FlowToggleModelChoiceField(queryset=ALL_TOGGLES, required=False, empty_label='Not connected.', help_text='Optional flow toggle (usually a relay/valve) connected to this tap.') temperature_sensor = ThermoSensorModelChoiceField(queryset=ALL_THERMOS, required=False, empty_label='No sensor.', help_text='Optional sensor monitoring the temperature at this tap.') class Meta: model = models.KegTap fields = ('name', 'notes', 'temperature_sensor', 'sort_order') def __init__(self, *args, **kwargs): super(TapForm, self).__init__(*args, **kwargs) if self.instance: self.fields['meter'].initial = self.instance.current_meter() self.fields['toggle'].initial = self.instance.current_toggle() self.fields['temperature_sensor'].initial = self.instance.temperature_sensor def save(self, commit=True): if not commit: raise ValueError('TapForm does not support commit=False') instance = super(TapForm, self).save(commit=True) b = get_kegbot_backend() b.connect_meter(instance, self.cleaned_data['meter']) b.connect_toggle(instance, self.cleaned_data['toggle']) return instance helper = FormHelper() helper.form_class = 'form-horizontal' helper.layout = Layout( Field('name', css_class='input-xlarge'), Field('meter', css_class='input-xlarge'), Field('toggle', css_class='input-xlarge'), Field('temperature_sensor', css_class='input-xlarge'), Field('sort_order', css_class='input-xlarge'), Field('notes', css_class='input-block-level', rows='3'), FormActions( Submit('submit_tap_form', 'Save Settings', css_class='btn-success'), ) )
class KegForm(forms.Form): keg_size = forms.ChoiceField(choices=keg_sizes.CHOICES, initial=keg_sizes.HALF_BARREL, required=True) initial_volume = forms.FloatField(label='Initial Volume', initial=0.0, required=False, help_text='Keg\'s Initial Volume') beer_name = forms.CharField(required=False) # legacy brewer_name = forms.CharField(required=False) # legacy beverage_name = forms.CharField(label='Beer Name', required=False) beverage_id = forms.CharField(widget=forms.HiddenInput(), required=False) producer_name = forms.CharField(label='Brewer', required=False) producer_id = forms.CharField(widget=forms.HiddenInput(), required=False) style_name = forms.CharField(required=True, label='Style', help_text='Example: Pale Ale, Stout, etc.') description = forms.CharField(max_length=256, label='Description', widget=forms.Textarea(), required=False, help_text='Optional user-visible description of the keg.') notes = forms.CharField(label='Notes', required=False, widget=forms.Textarea(), help_text='Optional private notes about this keg, viewable only by admins.') connect_to = forms.ModelChoiceField(queryset=ALL_TAPS, label='Connect To', required=False, help_text='If selected, immediately activates the keg on this tap. ' '(Any existing keg will be ended.)') helper = FormHelper() helper.form_class = 'form-horizontal beer-select' helper.layout = Layout( Field('beverage_name', css_class='input-xlarge'), Field('beverage_id', type='hidden'), Field('producer_name', css_class='input-xlarge'), Field('producer_id', type='hidden'), Field('style_name', css_class='input-xlarge'), Field('keg_size', css_class='input-xlarge'), Field('initial_volume', css_class='input-volume'), Field('description', css_class='input-block-level', rows='3'), Field('notes', css_class='input-block-level', rows='3'), Field('connect_to', css_class='input-block-level'), FormActions( Submit('submit_add_keg', 'Save', css_class='btn-primary'), ) ) def clean_beverage_name(self): beverage_name = self.cleaned_data.get('beverage_name') if not beverage_name: beverage_name = self.cleaned_data.get('beer_name') if not beverage_name: raise forms.ValidationError('Must specify a beverage name') self.cleaned_data['beverage_name'] = beverage_name return beverage_name def clean_producer_name(self): producer_name = self.cleaned_data.get('producer_name') if not producer_name: producer_name = self.cleaned_data.get('brewer_name') if not producer_name: raise forms.ValidationError('Must specify a producer name') self.cleaned_data['producer_name'] = producer_name return producer_name def save(self): if not self.is_valid(): raise ValueError('Form is not valid.') keg_size = self.cleaned_data.get('keg_size') if keg_size != 'other': full_volume_ml = None else: full_volume_ml = self.cleaned_data.get('initial_volume') # TODO(mikey): Support non-beer beverage types. cd = self.cleaned_data b = get_kegbot_backend() keg = b.create_keg(beverage_name=cd['beverage_name'], producer_name=cd['producer_name'], beverage_type='beer', style_name=cd['style_name'], keg_type=cd['keg_size'], full_volume_ml=full_volume_ml, notes=cd['notes'], description=cd['description']) tap = cd['connect_to'] if tap: if tap.is_active(): b.end_keg(tap.current_keg) b.attach_keg(tap, keg) return keg
def __init__(self): self.helper = FormHelper() # type: FormHelper
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["special_chars"].strip = False self.helper = FormHelper(self) self.helper.disable_csrf = True self.helper.form_tag = False
def __init__( self, model_label=None, current_models=None, edit=False, *args, **kwargs, ): self.current_models = current_models self.derivative_model_label = model_label if current_models: self.derivative_model = current_models.get(model_label, None) else: self.derivative_model = None self.edit = edit super().__init__(*args, **kwargs) # Add form.modules to fields (useful for getting which ones are necessary) for form in self.forms: if not hasattr(form, "module"): continue for field in form.fields: self.fields[field].module = form.module # If this is not an edit, we can't use the same label! if not edit and model_label: self.fields["label"].initial = model_label + "-new" self.helper = FormHelper() self.helper.form_id = "input_form" self.helper.form_class = "form-horizontal" self.helper.form_method = "post" self.helper.help_text_inline = True self.helper.label_class = "col-3 control-label" self.helper.field_class = "col-8" # Here we modify some of the tab layouts because they are more obvious this way. extras = { CosmoForm: ("z", "n", "sigma_8"), TransferForm: ("lnk_range", "dlnk", "takahashi"), HMFForm: ("logm_range", "dlog10m"), FilterForm: ("delta_c", ), WDMForm: ("wdm_mass", WDMAlterForm), } omit = [ TransferFramework, MassFunctionFramework, WDMFramework, WDMAlterForm ] print(self.forms[self.form_list.index( WDMAlterForm)]._layout().fields[-1].fields) self.helper.layout = Layout( Div( Div("label", css_class="col"), Div( HTML( # use HTML for button, to get icon in there :-) '<button type="submit" class="btn btn-primary">' '<i class="fas fa-calculator"></i> Calculate' "</button>"), css_class="col", ), Div( HTML( # use HTML for button, to get icon in there :-) '<a class="btn btn-warning" href="../..">' '<i class="fas fa-ban"></i> Cancel</a>'), css_class="col", ), css_class="row", ), TabHolder(*[ form._layout( extra=[ x for x in extras.get(self.form_list[i], ()) if isinstance(x, str) ], appended_rows=[ self.forms[self.form_list.index( x)]._layout().fields[-1] for x in extras.get(self.form_list[i], ()) if not isinstance(x, str) ], ) for i, form in enumerate(self.forms) if self.form_list[i] not in omit ]), ) self.helper.form_action = ""
def __init__(self, *args, **kwargs): if 'challenge' in kwargs: self.challenge = kwargs.pop('challenge') else: self.challenge = None self.discount_code = None super(RegistrationForm, self).__init__(*args, **kwargs) # Add challenge field if self.challenge: self.fields['challenge_question'] = forms.CharField( required=False, label=_('Solution'), #_('Challenge Question'), widget=forms.widgets.Textarea, help_text=_('Unlimited number of trials as long as ' '"submit my solution" is checked.')) self.fields['challenge_do_attempt'] = forms.BooleanField( required=False, label=_('Submit my solution to the challenge question'), initial=True) self.fields['has_solved_challenge'] = forms.BooleanField( required=False, widget=forms.widgets.HiddenInput, initial=False) # Discount Code self.fields['discount_code_code'] = forms.CharField( required=False, label=_('Discount Code'), initial='WHWaitlist') self.helper = FormHelper() self.helper.form_id = 'registration-form' self.helper.form_method = 'post' self.helper.form_action = 'register' self.helper.form_class = 'form-horizontal' self.helper.label_class = 'col-lg-3' self.helper.field_class = 'col-lg-7' self.helper.layout = Layout( Fieldset( _('General Information'), 'first_name', 'last_name', 'gender', 'email', ), Fieldset(_('Tell us a bit about yourself.'), Div(Field('is_student', data_off_text='No', data_on_text='Yes', data_size='mini'), css_id="is_student_wrapper"), Field('is_returning', data_off_text='No', data_on_text='Yes', data_size='mini'), Field('is_first_time_hacker', data_off_text='No', data_on_text='Yes', data_size='mini'), 'school', css_id='about-you'), Fieldset( _('Experience'), 'github', 'linkedin', 'resume', ), Fieldset( _('Misc.'), 'tshirt_size', Field('food_restrictions', rows=2), ), ) if self.challenge: self.helper.layout.extend( (Fieldset(_('Bonus'), HTML( get_challenge_question_header( self.challenge.encrypted_message)), 'has_solved_challenge', Field('challenge_question', rows=3, placeholder=_('Easy, the answer is...')), Field('challenge_do_attempt', data_off_text='No', data_on_text='Yes', data_size='mini'), css_id='bonus'), )) self.helper.layout.extend((Fieldset(_('Payment Options'), Field('discount_code_code', placeholder='CODE', readonly=True), css_id='payment'))) hide_checkout_hint = self.challenge is not None self.helper.layout.extend(( # Field('has_read_waiver', css_class="waiver"), Field('has_read_conditions', css_class="conditions"), HTML( get_registration_button_html( hide_checkout_hint=hide_checkout_hint)), ))
def __init__(self, *args, **kwargs): """Setup the form to work with crispy_forms.""" super(CustomPasswordChangeForm, self).__init__(*args, **kwargs) self.helper = FormHelper(self) self.helper.add_input(Submit('submit', 'Submit'))
def __init__(self, *args, **kwargs): """Setup the form to work with crispy_forms.""" super(EditUserForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.add_input(Submit('submit', 'Submit'))
def __init__(self, *args, **kwargs): super(MapAddDevicesCsv, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = False self.helper.form_show_labels = False
def __init__(self, *args, **kwargs): super(MapForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = False self.helper.layout = get_visualisation_layout()
def __init__(self, *args, **kwargs): super(UsersPasswordResetForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.add_input(Submit("recover", _("Recover password")))
def __init__(self, *args, **kwargs): super(UsersPasswordRecoveryForm, self).__init__(*args, **kwargs) self.fields["username_or_email"].label = "" self.helper = FormHelper() self.helper.add_input(Submit("recover", _("Recover password")))
def __init__(self, *args, **kwargs): super(TeamForm, self).__init__(*args, **kwargs) self.helper = FormHelper(self) self.helper.layout = Layout() self.helper.add_input(Submit("submit", "Save"))
def __init__(self, *args, **kwargs): super(ImportForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.add_input(Submit('submit', 'Submit'))
def __init__(self, *args, **kwargs): self.helper = FormHelper() self.helper.form_tag = False super().__init__(*args, **kwargs)
def __init__(self, *args, **kwargs): self.helper = FormHelper() self.helper.form_tag = False self.helper.disable_csrf = True self.helper.layout = Layout( Fieldset( 'Geographic Coordinates', Div( Div(HTML( 'To determine coordinates using a Global Positioning System (GPS), set the datum to the North American Datum of 1983 (NAD 83), the current ministry standard for mapping.<br /><br />' ), css_class='col-md-12'), css_class='row', ), Div( Div( Div( Div( HTML( '<div id="coord-error-pane" class="alert alert-warning" style="display:none"></div>' )), css_class='row', ), Div( Div(AppendedText('latitude', 'decimal degrees'), css_class='col-md-4'), Div(AppendedText('longitude', 'decimal degrees'), css_class='col-md-4'), css_class='row', ), Div( Div(HTML('OR'), css_class='col-md-12'), css_class='row', ), Div( Div(HTML(' '), css_class='col-md-12'), css_class='row', ), Div( Div(HTML( '<div id="div_id_gps-latitude_dms" class="form-group"> <label for="id_gps-latitude_d" class="control-label ">Latitude</label> <div class="controls "> <div class="input-group"> <input class="numberinput form-control" id="id_gps-latitude_d" name="gps-latitude_d" step="1" type="number" /> <span class="input-group-addon">deg</span> <input class="numberinput form-control" id="id_gps-latitude_m" name="gps-latitude_m" step="1" type="number" /> <span class="input-group-addon">min</span> <input class="numberinput form-control" id="id_gps-latitude_s" name="gps-latitude_s" step="0.01" type="number" /> <span class="input-group-addon">sec</span> </div> </div> </div>' ), css_class='col-md-5'), Div(HTML( '<div id="div_id_gps-longitude_dms" class="form-group"> <label for="id_gps-longitude_d" class="control-label ">Longitude</label> <div class="controls "> <div class="input-group"> <input class="numberinput form-control" id="id_gps-longitude_d" name="gps-longitude_d" step="1" type="number" /> <span class="input-group-addon">deg</span> <input class="numberinput form-control" id="id_gps-longitude_m" name="gps-longitude_m" step="1" type="number" /> <span class="input-group-addon">min</span> <input class="numberinput form-control" id="id_gps-longitude_s" name="gps-longitude_s" step="0.01" type="number" /> <span class="input-group-addon">sec</span> </div> </div> </div>' ), css_class='col-md-5'), css_class='row', ), Div( Div(HTML('OR'), css_class='col-md-12'), css_class='row', ), Div( Div(HTML(' '), css_class='col-md-12'), css_class='row', ), Div( Div(HTML( '<div id="div_id_gps-zone" class="form-group"> <label for="id_gps-zone" class="control-label ">Zone</label> <div class="controls "> <select class="select form-control" id="id_gps-zone" name="gps-zone"><option value="" selected="selected">---------</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option></select> </div> </div>' ), css_class='col-md-2'), Div(HTML( '<div id="div_id_gps-utm_easting" class="form-group"> <label for="id_gps-utm_easting" class="control-label ">UTM Easting</label> <div class="controls "> <div class="input-group"> <input class="numberinput form-control" id="id_gps-utm_easting" name="gps-utm_easting" step="1" type="number" min="200000" max="800000" /> <span class="input-group-addon">m</span> </div> </div> </div>' ), css_class='col-md-3'), Div(HTML( '<div id="div_id_gps-utm_northing" class="form-group"> <label for="id_gps-utm_northing" class="control-label ">UTM Northing</label> <div class="controls "> <div class="input-group"> <input class="numberinput form-control" id="id_gps-utm_northing" name="gps-utm_northing" step="1" type="number" min="5350500" max="6655250" /> <span class="input-group-addon">m</span> </div> </div> </div>' ), css_class='col-md-3'), css_class='row', ), css_class='col-md-8', ), Div( Div(id='add-map', aria_label= 'This map shows the location of a prospective well as a light blue pushpin, as well as any existing wells as dark blue circles. Coordinates for the prospective well may be refined by dragging the pushpin with the mouse.' ), Div(id='attribution'), Div( HTML( '<br />After the GPS coordinates are entered, the pushpin can be moved by clicking and dragging it on the map. The GPS coordinates will be updated automatically.' )), css_class='col-md-4', ), css_class='row', ), ), Fieldset( 'Method of Drilling', Div( Div(AppendedText('ground_elevation', 'ft (asl)'), css_class='col-md-2'), Div('ground_elevation_method', css_class='col-md-3'), css_class='row', ), Div( Div('drilling_method', css_class='col-md-2'), Div('other_drilling_method', css_class='col-md-3'), css_class='row', ), Div( Div(HTML(' '), css_class='col-md-12'), css_class='row', ), Div( Div('well_orientation', css_class='col-md-3'), css_class='row', ), )) super(ActivitySubmissionGpsForm, self).__init__(*args, **kwargs) # Make fields required on the form even though they are not required in the DB due to legacy data issues # TODO - check admin or staff user and don't make these fields required self.fields['latitude'].required = True self.fields['longitude'].required = True self.fields['drilling_method'].required = True
def __init__(self, *args, **kwargs): #exclude_list=kwargs.pop('exclude_list', '') super(ReadForm, self).__init__(*args, **kwargs) self.helper = FormHelper(self) self.helper.layout.append(Hidden('read_id', '{{read_id}}')) self.helper.layout.append(Submit('save', 'save'))
def __init__(self, *args, **kwargs): self.helper = FormHelper() self.helper.add_input(Submit("submit", "Submit")) super().__init__(*args, **kwargs)
def __init__(self, *args, **kwargs): self.game = models.Game.objects.get(pk=kwargs.pop('game_id')) super(ScreenshotForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.add_input(Submit('submit', "Submit"))
def setup_flow_layout(self): self.helper = getattr(self, 'helper', FormHelper()) Frm.set_flow_layout(self, self.flow_layout, strict=self.strict_flow_layout)
def __init__(self, *args, **kwargs): super(CommentForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_id = 'comment' self.helper.form_method = 'post' self.helper.add_input(Submit('submit', 'Submit'))
def __init__(self, *args, **kwargs): ImageValidationMixin.__init__(self, *args, **kwargs) ModelForm.__init__(self, *args, **kwargs) self.helper = FormHelper(self) self.helper.form_class = 'form-horizontal' self.helper.form_tag = False
def __init__(self, *args, **kwargs): super(EmailForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_show_labels = True
def __init__(self, *args, **kwargs): super(MessageForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = False
def __init__(self, *args, **kwargs): self.helper = FormHelper() self.helper.form_method = 'post' self.helper.add_input(Submit('submit', submit_button or 'Submit')) self.helper.form_action = form_action or '' super().__init__(*args, **kwargs)
class ChangeKegForm(forms.Form): keg_size = forms.ChoiceField(choices=keg_sizes.CHOICES, initial=keg_sizes.HALF_BARREL, required=True) initial_volume = forms.FloatField(label='Initial Volume', initial=0.0, required=False, help_text='Keg\'s Initial Volume') beer_name = forms.CharField(required=False) # legacy brewer_name = forms.CharField(required=False) # legacy beverage_name = forms.CharField(label='Beer Name', required=False) beverage_id = forms.CharField(widget=forms.HiddenInput(), required=False) producer_name = forms.CharField(label='Brewer', required=False) producer_id = forms.CharField(widget=forms.HiddenInput(), required=False) style_name = forms.CharField(required=True, label='Style', help_text='Example: Pale Ale, Stout, etc.') helper = FormHelper() helper.form_class = 'form-horizontal beer-select' helper.layout = Layout( Field('beverage_name', css_class='input-xlarge'), Field('beverage_id', type='hidden'), Field('producer_name', css_class='input-xlarge'), Field('producer_id', type='hidden'), Field('style_name', css_class='input-xlarge'), Field('keg_size', css_class='input-xlarge'), Field('initial_volume', css_class='input-volume'), FormActions( Submit('submit_change_keg_form', 'Activate Keg', css_class='btn-primary'), ) ) def clean_beverage_name(self): beverage_name = self.cleaned_data.get('beverage_name') if not beverage_name: beverage_name = self.cleaned_data.get('beer_name') if not beverage_name: raise forms.ValidationError('Must specify a beverage name') self.cleaned_data['beverage_name'] = beverage_name return beverage_name def clean_producer_name(self): producer_name = self.cleaned_data.get('producer_name') if not producer_name: producer_name = self.cleaned_data.get('brewer_name') if not producer_name: raise forms.ValidationError('Must specify a producer name') self.cleaned_data['producer_name'] = producer_name return producer_name def save(self, tap): if not self.is_valid(): raise ValueError('Form is not valid.') b = get_kegbot_backend() if tap.is_active(): b.end_keg(tap.current_keg) keg_size = self.cleaned_data.get('keg_size') full_volume_ml = self.cleaned_data.get('full_volume_ml') if keg_size != 'other': full_volume_ml = None else: full_volume_ml = self.cleaned_data.get('initial_volume') # TODO(mikey): Support non-beer beverage types. cd = self.cleaned_data keg = b.start_keg(tap, beverage_name=cd['beverage_name'], producer_name=cd['producer_name'], beverage_type='beer', style_name=cd['style_name'], keg_type=cd['keg_size'], full_volume_ml=full_volume_ml) if cd.get('description'): keg.description = cd['description'] keg.save()
def get_form_helper(self, form_tag=True): """ Returns the crispy forms form helper to be used. """ helper = FormHelper() helper.form_method = 'post' helper.form_tag = form_tag button_classes = "btn col mb-4" layout_content = [] if self.can_create: layout_content.append( Row( Column( HTML( """ <a class="%s" href="%s"> %s <i class="fa fa-plus" aria-hidden="true"></i> </a> """ % (button_classes + " btn-primary", self.create_object_url, "Skapa ny %s" % self.verbose_name_singular.lower()) ), ), Column() ) ) if self.can_delete or self.can_download: row_content = [] if self.can_download: row_content.append( Column( HTML( """ <a class="%s" href="%s" type="submit" download> %s <i class="fa fa-download" aria-hidden="true"></i> </a> """ % (button_classes + " btn-success", self.download_url, "Ladda ned %s" % self.verbose_name_plural.lower()) ), ) ) if self.can_delete: row_content.append( Column( HTML( """ <button class="%s" name="delete" type="submit"> %s <i class="fa fa-trash" aria-hidden="true"></i> </button> """ % (button_classes + " btn-danger", "Radera alla %s" % self.verbose_name_plural.lower()) ), ) ) if len(row_content) == 1: row_content.append(Column()) layout_content.append(Row(*row_content)) if self.can_upload: layout_content.append( Row( Column( 'upload_objects_file', HTML( """ <script type="text/javascript" id="script-upload_objects_file" src="%s"></script> """ % (static(self.upload_js_file)) ), css_class='col-12' ), ) ) helper.layout = Layout(*layout_content) return helper
def __init__(self, *args, **kwargs): super(AuxServerAddressForm, self).__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs["autocomplete"] = "chrome-off" self.fields["primary"].label = "Make Primary Address" self.fields["ip_address"].label = "" self.fields["ip_address"].widget.attrs["placeholder"] = "IP Address" self.fields["ip_address"].widget.attrs["autocomplete"] = "off" self.helper = FormHelper() # Disable the <form> tags because this will be inside of an instance of `ClientForm()` self.helper.form_tag = False # Disable CSRF so `csrfmiddlewaretoken` is not rendered multiple times self.helper.disable_csrf = True # Hide the field labels from the model self.helper.form_show_labels = False # Layout the form for Bootstrap self.helper.layout = Layout( # Wrap form in a div so Django renders form instances in their own element Div( # These Bootstrap alerts begin hidden and function as undo buttons for deleted forms Alert( content=(""" <strong>Address Deleted!</strong> Deletion will be permanent once the form is submitted. Click this alert to undo. """), css_class="alert alert-danger show formset-undo-button", style="display:none; cursor:pointer;", template="alert.html", block=False, dismiss=False, ), Div( HTML(""" <p><strong>Address #<span class="counter">{{ forloop.counter }}</span></strong></p> <hr> """), Row( Column("ip_address", css_class="form-group col-md-6 mb-0"), Column( Field( "primary", css_class="primary-checkbox", onchange="checkboxUpdate(this)", ), css_class="form-group col-md-6 mb-0", ), css_class="form-row", ), Row( Column( Field("DELETE", style="display: none;"), Button( "formset-del-button", "Delete Address", css_class= "btn-sm btn-danger formset-del-button", ), css_class="form-group col-md-12 text-center", ), css_class="form-row", ), HTML(""" <p class="form-spacer"></p> """), css_class="formset", ), css_class="formset-container", ))
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_show_labels = False