Skip to content

Commit 09bee75

Browse files
committed
#3892: Convert CUSTOMLINK_MODELS to a Q object
1 parent 9c4ab79 commit 09bee75

5 files changed

+43
-29
lines changed

netbox/extras/constants.py

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,39 @@
3535
)
3636

3737
# Custom links
38-
CUSTOMLINK_MODELS = [
39-
'circuits.circuit',
40-
'circuits.provider',
41-
'dcim.cable',
42-
'dcim.device',
43-
'dcim.devicetype',
44-
'dcim.powerpanel',
45-
'dcim.powerfeed',
46-
'dcim.rack',
47-
'dcim.site',
48-
'ipam.aggregate',
49-
'ipam.ipaddress',
50-
'ipam.prefix',
51-
'ipam.service',
52-
'ipam.vlan',
53-
'ipam.vrf',
54-
'secrets.secret',
55-
'tenancy.tenant',
56-
'virtualization.cluster',
57-
'virtualization.virtualmachine',
58-
]
38+
CUSTOMLINK_MODELS = Q(
39+
Q(app_label='circuits', model__in=[
40+
'circuit',
41+
'provider',
42+
]) |
43+
Q(app_label='dcim', model__in=[
44+
'cable',
45+
'device',
46+
'devicetype',
47+
'powerpanel',
48+
'powerfeed',
49+
'rack',
50+
'site',
51+
]) |
52+
Q(app_label='ipam', model__in=[
53+
'aggregate',
54+
'ipaddress',
55+
'prefix',
56+
'service',
57+
'vlan',
58+
'vrf',
59+
]) |
60+
Q(app_label='secrets', model__in=[
61+
'secret',
62+
]) |
63+
Q(app_label='tenancy', model__in=[
64+
'tenant',
65+
]) |
66+
Q(app_label='virtualization', model__in=[
67+
'cluster',
68+
'virtualmachine',
69+
])
70+
)
5971

6072
# Models which can have Graphs associated with them
6173
GRAPH_MODELS = (

netbox/extras/migrations/0022_custom_links.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Migration(migrations.Migration):
2222
('group_name', models.CharField(blank=True, max_length=50)),
2323
('button_class', models.CharField(default='default', max_length=30)),
2424
('new_window', models.BooleanField()),
25-
('content_type', models.ForeignKey(limit_choices_to=extras.models.get_custom_link_models, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
25+
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
2626
],
2727
options={
2828
'ordering': ['group_name', 'weight', 'name'],

netbox/extras/migrations/0022_custom_links_squashed_0034_configcontext_tags.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class Migration(migrations.Migration):
106106
('group_name', models.CharField(blank=True, max_length=50)),
107107
('button_class', models.CharField(default='default', max_length=30)),
108108
('new_window', models.BooleanField()),
109-
('content_type', models.ForeignKey(limit_choices_to=extras.models.get_custom_link_models, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
109+
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
110110
],
111111
options={
112112
'ordering': ['group_name', 'weight', 'name'],

netbox/extras/migrations/0036_contenttype_filters_to_q_objects.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
# Generated by Django 2.2.8 on 2020-01-15 21:00
1+
# Generated by Django 2.2.8 on 2020-01-15 21:04
22

33
from django.db import migrations, models
4+
import django.db.models.deletion
45

56

67
class Migration(migrations.Migration):
@@ -15,4 +16,9 @@ class Migration(migrations.Migration):
1516
name='obj_type',
1617
field=models.ManyToManyField(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'provider'])), models.Q(('app_label', 'dcim'), ('model__in', ['device', 'devicetype', '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')), related_name='custom_fields', to='contenttypes.ContentType'),
1718
),
19+
migrations.AlterField(
20+
model_name='customlink',
21+
name='content_type',
22+
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'),
23+
),
1824
]

netbox/extras/models.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,6 @@ def delete(self, using=None, keep_parents=False):
367367
# Custom links
368368
#
369369

370-
def get_custom_link_models():
371-
return model_names_to_filter_dict(CUSTOMLINK_MODELS)
372-
373-
374370
class CustomLink(models.Model):
375371
"""
376372
A custom link to an external representation of a NetBox object. The link text and URL fields accept Jinja2 template
@@ -379,7 +375,7 @@ class CustomLink(models.Model):
379375
content_type = models.ForeignKey(
380376
to=ContentType,
381377
on_delete=models.CASCADE,
382-
limit_choices_to=get_custom_link_models
378+
limit_choices_to=CUSTOMLINK_MODELS
383379
)
384380
name = models.CharField(
385381
max_length=100,

0 commit comments

Comments
 (0)