diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py index 9d396dd3d..752a6ccaa 100644 --- a/netbox/extras/admin.py +++ b/netbox/extras/admin.py @@ -7,6 +7,18 @@ from django.utils.safestring import mark_safe from .models import CustomField, CustomFieldChoice, Graph, ExportTemplate, TopologyMap, UserAction +def order_content_types(field): + """ + Order the list of available ContentTypes by application + """ + queryset = field.queryset.order_by('app_label', 'model') + field.choices = [(ct.pk, '{} > {}'.format(ct.app_label, ct.name)) for ct in queryset] + + +# +# Custom fields +# + class CustomFieldForm(forms.ModelForm): class Meta: @@ -16,9 +28,7 @@ class CustomFieldForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(CustomFieldForm, self).__init__(*args, **kwargs) - # Organize the available ContentTypes - queryset = self.fields['obj_type'].queryset.order_by('app_label', 'model') - self.fields['obj_type'].choices = [(ct.pk, '{} > {}'.format(ct.app_label, ct.name)) for ct in queryset] + order_content_types(self.fields['obj_type']) class CustomFieldChoiceAdmin(admin.TabularInline): @@ -36,16 +46,43 @@ class CustomFieldAdmin(admin.ModelAdmin): return ', '.join([ct.name for ct in obj.obj_type.all()]) +# +# Graphs +# + @admin.register(Graph) class GraphAdmin(admin.ModelAdmin): list_display = ['name', 'type', 'weight', 'source'] +# +# Export templates +# + +class ExportTemplateForm(forms.ModelForm): + + class Meta: + model = ExportTemplate + exclude = [] + + def __init__(self, *args, **kwargs): + super(ExportTemplateForm, self).__init__(*args, **kwargs) + + # Format ContentType choices + order_content_types(self.fields['content_type']) + self.fields['content_type'].choices.insert(0, ('', '---------')) + + @admin.register(ExportTemplate) class ExportTemplateAdmin(admin.ModelAdmin): list_display = ['name', 'content_type', 'description', 'mime_type', 'file_extension'] + form = ExportTemplateForm +# +# Topology maps +# + @admin.register(TopologyMap) class TopologyMapAdmin(admin.ModelAdmin): list_display = ['name', 'slug', 'site'] @@ -54,6 +91,10 @@ class TopologyMapAdmin(admin.ModelAdmin): } +# +# User actions +# + @admin.register(UserAction) class UserActionAdmin(admin.ModelAdmin): actions = None diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 90edad18d..99eb779c6 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -38,10 +38,11 @@ GRAPH_TYPE_CHOICES = ( # Models which support export templates EXPORTTEMPLATE_MODELS = [ + 'provider', 'circuit', # Circuits 'site', 'rack', 'device', 'consoleport', 'powerport', 'interfaceconnection', # DCIM 'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM - 'provider', 'circuit', # Circuits - 'tenant', # Tenants + 'tenant', # Tenancy + 'cluster', 'virtualmachine', # Virtualization ] # User action types