From d9437a08f0fdcbc1d1a74b3878cf6ba1e4ea312b Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 15 Jan 2020 16:11:44 -0500 Subject: [PATCH] #3892: Convert EXPORTTEMPLATE_MODELS to a Q object --- netbox/extras/constants.py | 70 +++++++++++-------- netbox/extras/migrations/0022_custom_links.py | 2 +- ..._links_squashed_0034_configcontext_tags.py | 2 +- .../0036_contenttype_filters_to_q_objects.py | 7 +- netbox/extras/models.py | 6 +- 5 files changed, 50 insertions(+), 37 deletions(-) diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 6d8a49247..b1e5ebf41 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -82,35 +82,47 @@ GRAPH_MODELS = Q( ) # Models which support export templates -EXPORTTEMPLATE_MODELS = [ - 'circuits.circuit', - 'circuits.provider', - 'dcim.cable', - 'dcim.consoleport', - 'dcim.device', - 'dcim.devicetype', - 'dcim.interface', - 'dcim.inventoryitem', - 'dcim.manufacturer', - 'dcim.powerpanel', - 'dcim.powerport', - 'dcim.powerfeed', - 'dcim.rack', - 'dcim.rackgroup', - 'dcim.region', - 'dcim.site', - 'dcim.virtualchassis', - 'ipam.aggregate', - 'ipam.ipaddress', - 'ipam.prefix', - 'ipam.service', - 'ipam.vlan', - 'ipam.vrf', - 'secrets.secret', - 'tenancy.tenant', - 'virtualization.cluster', - 'virtualization.virtualmachine', -] +EXPORTTEMPLATE_MODELS = Q( + Q(app_label='circuits', model__in=[ + 'circuit', + 'provider', + ]) | + Q(app_label='dcim', model__in=[ + 'cable', + 'consoleport', + 'device', + 'devicetype', + 'interface', + 'inventoryitem', + 'manufacturer', + 'powerpanel', + 'powerport', + 'powerfeed', + 'rack', + 'rackgroup', + 'region', + 'site', + 'virtualchassis', + ]) | + Q(app_label='ipam', model__in=[ + 'aggregate', + 'ipaddress', + 'prefix', + 'service', + 'vlan', + 'vrf', + ]) | + Q(app_label='secrets', model__in=[ + 'secret', + ]) | + Q(app_label='tenancy', model__in=[ + 'tenant', + ]) | + Q(app_label='virtualization', model__in=[ + 'cluster', + 'virtualmachine', + ]) +) # Report logging levels LOG_DEFAULT = 0 diff --git a/netbox/extras/migrations/0022_custom_links.py b/netbox/extras/migrations/0022_custom_links.py index f56229f08..366863018 100644 --- a/netbox/extras/migrations/0022_custom_links.py +++ b/netbox/extras/migrations/0022_custom_links.py @@ -38,7 +38,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='exporttemplate', name='content_type', - field=models.ForeignKey(limit_choices_to=extras.models.get_export_template_models, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), ), migrations.AlterField( model_name='webhook', diff --git a/netbox/extras/migrations/0022_custom_links_squashed_0034_configcontext_tags.py b/netbox/extras/migrations/0022_custom_links_squashed_0034_configcontext_tags.py index e1ca96cb1..bfa22b7db 100644 --- a/netbox/extras/migrations/0022_custom_links_squashed_0034_configcontext_tags.py +++ b/netbox/extras/migrations/0022_custom_links_squashed_0034_configcontext_tags.py @@ -120,7 +120,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='exporttemplate', name='content_type', - field=models.ForeignKey(limit_choices_to=extras.models.get_export_template_models, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), ), migrations.AlterField( model_name='webhook', diff --git a/netbox/extras/migrations/0036_contenttype_filters_to_q_objects.py b/netbox/extras/migrations/0036_contenttype_filters_to_q_objects.py index e58b6aed7..49fcfb782 100644 --- a/netbox/extras/migrations/0036_contenttype_filters_to_q_objects.py +++ b/netbox/extras/migrations/0036_contenttype_filters_to_q_objects.py @@ -1,4 +1,4 @@ -# Generated by Django 2.2.8 on 2020-01-15 21:07 +# Generated by Django 2.2.8 on 2020-01-15 21:11 from django.db import migrations, models import django.db.models.deletion @@ -21,6 +21,11 @@ class Migration(migrations.Migration): name='content_type', field=models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'provider'])), models.Q(('app_label', 'dcim'), ('model__in', ['cable', 'device', 'devicetype', 'powerpanel', 'powerfeed', 'rack', 'site'])), models.Q(('app_label', 'ipam'), ('model__in', ['aggregate', 'ipaddress', 'prefix', 'service', 'vlan', 'vrf'])), models.Q(('app_label', 'secrets'), ('model__in', ['secret'])), models.Q(('app_label', 'tenancy'), ('model__in', ['tenant'])), models.Q(('app_label', 'virtualization'), ('model__in', ['cluster', 'virtualmachine'])), _connector='OR')), on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), ), + migrations.AlterField( + model_name='exporttemplate', + name='content_type', + field=models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'provider'])), models.Q(('app_label', 'dcim'), ('model__in', ['cable', 'consoleport', 'device', 'devicetype', 'interface', 'inventoryitem', 'manufacturer', 'powerpanel', 'powerport', 'powerfeed', 'rack', 'rackgroup', 'region', 'site', 'virtualchassis'])), models.Q(('app_label', 'ipam'), ('model__in', ['aggregate', 'ipaddress', 'prefix', 'service', 'vlan', 'vrf'])), models.Q(('app_label', 'secrets'), ('model__in', ['secret'])), models.Q(('app_label', 'tenancy'), ('model__in', ['tenant'])), models.Q(('app_label', 'virtualization'), ('model__in', ['cluster', 'virtualmachine'])), _connector='OR')), on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), + ), migrations.AlterField( model_name='graph', name='type', diff --git a/netbox/extras/models.py b/netbox/extras/models.py index fb97cfd8f..a0f37075c 100644 --- a/netbox/extras/models.py +++ b/netbox/extras/models.py @@ -482,15 +482,11 @@ class Graph(models.Model): # Export templates # -def get_export_template_models(): - return model_names_to_filter_dict(EXPORTTEMPLATE_MODELS) - - class ExportTemplate(models.Model): content_type = models.ForeignKey( to=ContentType, on_delete=models.CASCADE, - limit_choices_to=get_export_template_models + limit_choices_to=EXPORTTEMPLATE_MODELS ) name = models.CharField( max_length=100