class Meta: nullable_fields = [ "date_added", "description", ] widgets = { "date_added": DatePicker(), }
class Meta: model = EoxNotice fields = [ "device_type", "end_of_sale", "end_of_support", "end_of_sw_releases", "end_of_security_patches", "notice_url", ] widgets = { "end_of_sale": DatePicker(), "end_of_support": DatePicker(), "end_of_sw_releases": DatePicker(), "end_of_security_patches": DatePicker(), }
class Meta: model = EoxNotice # Define the fields above for ordering and widget purposes fields = [ "q", "devices", "device_type", "end_of_sale", "end_of_support", "end_of_sw_releases", "end_of_security_patches", "notice_url", ] widgets = { "end_of_sale": DatePicker(), "end_of_support": DatePicker(), "end_of_sw_releases": DatePicker(), "end_of_security_patches": DatePicker(), }
class Meta: model = Aggregate fields = [ "prefix", "rir", "date_added", "description", "tenant_group", "tenant", "tags", ] help_texts = { "prefix": "IPv4 or IPv6 network", "rir": "Regional Internet Registry responsible for this prefix", } widgets = { "date_added": DatePicker(), }
class Meta: model = Circuit fields = [ "cid", "type", "provider", "status", "install_date", "commit_rate", "description", "tenant_group", "tenant", "comments", "tags", ] help_texts = { "cid": "Unique circuit ID", "commit_rate": "Committed rate", } widgets = { "install_date": DatePicker(), }
def to_form_field(self, set_initial=True, enforce_required=True, for_csv_import=False): """ Return a form field suitable for setting a CustomField's value for an object. set_initial: Set initial date for the field. This should be False when generating a field for bulk editing. enforce_required: Honor the value of CustomField.required. Set to False for filtering/bulk editing. for_csv_import: Return a form field suitable for bulk import of objects in CSV format. """ initial = self.default if set_initial else None required = self.required if enforce_required else False # Integer if self.type == CustomFieldTypeChoices.TYPE_INTEGER: field = forms.IntegerField( required=required, initial=initial, min_value=self.validation_minimum, max_value=self.validation_maximum, ) # Boolean elif self.type == CustomFieldTypeChoices.TYPE_BOOLEAN: choices = ( (None, "---------"), (True, "True"), (False, "False"), ) field = forms.NullBooleanField( required=required, initial=initial, widget=StaticSelect2(choices=choices), ) # Date elif self.type == CustomFieldTypeChoices.TYPE_DATE: field = forms.DateField(required=required, initial=initial, widget=DatePicker()) # URL elif self.type == CustomFieldTypeChoices.TYPE_URL: field = LaxURLField(required=required, initial=initial) # Text elif self.type == CustomFieldTypeChoices.TYPE_TEXT: field = forms.CharField(max_length=255, required=required, initial=initial) if self.validation_regex: field.validators = [ RegexValidator( regex=self.validation_regex, message=mark_safe( f"Values must match this regex: <code>{self.validation_regex}</code>" ), ) ] # Select or Multi-select else: choices = [(cfc.value, cfc.value) for cfc in self.choices.all()] default_choice = self.choices.filter(value=self.default).first() if not required or default_choice is None: choices = add_blank_choice(choices) # Set the initial value to the first available choice (if any) if set_initial and default_choice: initial = default_choice.value if self.type == CustomFieldTypeChoices.TYPE_SELECT: field_class = CSVChoiceField if for_csv_import else forms.ChoiceField field = field_class( choices=choices, required=required, initial=initial, widget=StaticSelect2(), ) else: field_class = CSVMultipleChoiceField if for_csv_import else forms.MultipleChoiceField field = field_class(choices=choices, required=required, initial=initial, widget=StaticSelect2Multiple()) field.model = self field.label = str(self) if self.description: field.help_text = self.description return field