From 61cf9030285697f5e1bc70eccb958d0219594784 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 17 Sep 2020 12:39:57 -0400 Subject: [PATCH] Clean up CustomField admin form --- netbox/extras/admin.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py index 9af9077ac..a8b4c0eb8 100644 --- a/netbox/extras/admin.py +++ b/netbox/extras/admin.py @@ -2,6 +2,7 @@ from django import forms from django.contrib import admin from utilities.forms import LaxURLField +from .choices import CustomFieldTypeChoices from .models import CustomField, CustomLink, ExportTemplate, JobResult, Webhook @@ -80,6 +81,14 @@ class CustomFieldForm(forms.ModelForm): order_content_types(self.fields['obj_type']) + def clean(self): + + # Validate selection choices + if self.cleaned_data['type'] == CustomFieldTypeChoices.TYPE_SELECT and len(self.cleaned_data['choices']) < 2: + raise forms.ValidationError({ + 'choices': 'Selection fields must specify at least two choices.' + }) + @admin.register(CustomField) class CustomFieldAdmin(admin.ModelAdmin): @@ -91,6 +100,19 @@ class CustomFieldAdmin(admin.ModelAdmin): list_filter = [ 'type', 'required', 'obj_type', ] + fieldsets = ( + ('Custom Field', { + 'fields': ('type', 'name', 'weight', 'label', 'description', 'required', 'default', 'filter_logic') + }), + ('Assignment', { + 'description': 'A custom field must be assigned to one or more object types.', + 'fields': ('obj_type',) + }), + ('Choices', { + 'description': 'A selection field must have two or more choices assigned to it.', + 'fields': ('choices',) + }) + ) def models(self, obj): return ', '.join([ct.name for ct in obj.obj_type.all()])