Closes #17166: Remove obsolete limit_choices_to argument from ForeignKey & M2M fields

This commit is contained in:
Jeremy Stretch 2025-04-03 09:17:20 -04:00
parent 6a966ee6c1
commit d93d398afa
30 changed files with 2 additions and 224 deletions

View File

@ -39,9 +39,6 @@ class Migration(migrations.Migration):
name='termination_type', name='termination_type',
field=models.ForeignKey( field=models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(
('model__in', ('region', 'sitegroup', 'site', 'location', 'providernetwork'))
),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',

View File

@ -51,7 +51,6 @@ class Migration(migrations.Migration):
name='member_type', name='member_type',
field=models.ForeignKey( field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
limit_choices_to=models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'virtualcircuit'])),
related_name='+', related_name='+',
to='contenttypes.contenttype', to='contenttypes.contenttype',
blank=True, blank=True,
@ -68,7 +67,6 @@ class Migration(migrations.Migration):
model_name='circuitgroupassignment', model_name='circuitgroupassignment',
name='member_type', name='member_type',
field=models.ForeignKey( field=models.ForeignKey(
limit_choices_to=models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'virtualcircuit'])),
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
to='contenttypes.contenttype' to='contenttypes.contenttype'

View File

@ -182,7 +182,6 @@ class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin,
""" """
member_type = models.ForeignKey( member_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
limit_choices_to=CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+' related_name='+'
) )
@ -249,7 +248,6 @@ class CircuitTermination(
termination_type = models.ForeignKey( termination_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
on_delete=models.PROTECT, on_delete=models.PROTECT,
limit_choices_to=Q(model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES),
related_name='+', related_name='+',
blank=True, blank=True,
null=True null=True

View File

@ -505,28 +505,6 @@ class Migration(migrations.Migration):
model_name='cable', model_name='cable',
name='termination_a_type', name='termination_a_type',
field=models.ForeignKey( field=models.ForeignKey(
limit_choices_to=models.Q(
models.Q(
models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))),
models.Q(
('app_label', 'dcim'),
(
'model__in',
(
'consoleport',
'consoleserverport',
'frontport',
'interface',
'powerfeed',
'poweroutlet',
'powerport',
'rearport',
),
),
),
_connector='OR',
)
),
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
to='contenttypes.contenttype', to='contenttypes.contenttype',
@ -536,28 +514,6 @@ class Migration(migrations.Migration):
model_name='cable', model_name='cable',
name='termination_b_type', name='termination_b_type',
field=models.ForeignKey( field=models.ForeignKey(
limit_choices_to=models.Q(
models.Q(
models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))),
models.Q(
('app_label', 'dcim'),
(
'model__in',
(
'consoleport',
'consoleserverport',
'frontport',
'interface',
'powerfeed',
'poweroutlet',
'powerport',
'rearport',
),
),
),
_connector='OR',
)
),
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
to='contenttypes.contenttype', to='contenttypes.contenttype',

View File

@ -866,21 +866,6 @@ class Migration(migrations.Migration):
name='component_type', name='component_type',
field=models.ForeignKey( field=models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(
('app_label', 'dcim'),
(
'model__in',
(
'consoleport',
'consoleserverport',
'frontport',
'interface',
'poweroutlet',
'powerport',
'rearport',
),
),
),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
@ -1238,21 +1223,6 @@ class Migration(migrations.Migration):
'component_type', 'component_type',
models.ForeignKey( models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(
('app_label', 'dcim'),
(
'model__in',
(
'consoleporttemplate',
'consoleserverporttemplate',
'frontporttemplate',
'interfacetemplate',
'poweroutlettemplate',
'powerporttemplate',
'rearporttemplate',
),
),
),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
@ -1478,28 +1448,6 @@ class Migration(migrations.Migration):
( (
'termination_type', 'termination_type',
models.ForeignKey( models.ForeignKey(
limit_choices_to=models.Q(
models.Q(
models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))),
models.Q(
('app_label', 'dcim'),
(
'model__in',
(
'consoleport',
'consoleserverport',
'frontport',
'interface',
'powerfeed',
'poweroutlet',
'powerport',
'rearport',
),
),
),
_connector='OR',
)
),
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
to='contenttypes.contenttype', to='contenttypes.contenttype',

View File

@ -31,13 +31,6 @@ class Migration(migrations.Migration):
'assigned_object_type', 'assigned_object_type',
models.ForeignKey( models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(
models.Q(
models.Q(('app_label', 'dcim'), ('model', 'interface')),
models.Q(('app_label', 'virtualization'), ('model', 'vminterface')),
_connector='OR',
)
),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',

View File

@ -259,7 +259,6 @@ class CableTermination(ChangeLoggedModel):
) )
termination_type = models.ForeignKey( termination_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
limit_choices_to=CABLE_TERMINATION_MODELS,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+' related_name='+'
) )

View File

@ -751,7 +751,6 @@ class InventoryItemTemplate(MPTTModel, ComponentTemplateModel):
) )
component_type = models.ForeignKey( component_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
limit_choices_to=MODULAR_COMPONENT_TEMPLATE_MODELS,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+', related_name='+',
blank=True, blank=True,

View File

@ -1274,7 +1274,6 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin):
) )
component_type = models.ForeignKey( component_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
limit_choices_to=MODULAR_COMPONENT_MODELS,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+', related_name='+',
blank=True, blank=True,

View File

@ -1225,7 +1225,6 @@ class MACAddress(PrimaryModel):
) )
assigned_object_type = models.ForeignKey( assigned_object_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
limit_choices_to=MACADDRESS_ASSIGNMENT_MODELS,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+', related_name='+',
blank=True, blank=True,

View File

@ -3,7 +3,6 @@ from django.contrib.contenttypes.fields import GenericForeignKey
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from dcim.constants import LOCATION_SCOPE_TYPES
__all__ = ( __all__ = (
'CachedScopeMixin', 'CachedScopeMixin',
@ -44,7 +43,6 @@ class CachedScopeMixin(models.Model):
scope_type = models.ForeignKey( scope_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
on_delete=models.PROTECT, on_delete=models.PROTECT,
limit_choices_to=models.Q(model__in=LOCATION_SCOPE_TYPES),
related_name='+', related_name='+',
blank=True, blank=True,
null=True null=True

View File

@ -195,12 +195,6 @@ class Migration(migrations.Migration):
'scope_type', 'scope_type',
models.ForeignKey( models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(
(
'model__in',
('region', 'sitegroup', 'site', 'location', 'rack', 'clustergroup', 'cluster'),
)
),
null=True, null=True,
on_delete=django.db.models.deletion.CASCADE, on_delete=django.db.models.deletion.CASCADE,
to='contenttypes.contenttype', to='contenttypes.contenttype',

View File

@ -154,13 +154,6 @@ class Migration(migrations.Migration):
name='assigned_object_type', name='assigned_object_type',
field=models.ForeignKey( field=models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(
models.Q(
models.Q(('app_label', 'dcim'), ('model', 'interface')),
models.Q(('app_label', 'virtualization'), ('model', 'vminterface')),
_connector='OR',
)
),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',

View File

@ -136,14 +136,6 @@ class Migration(migrations.Migration):
name='assigned_object_type', name='assigned_object_type',
field=models.ForeignKey( field=models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(
models.Q(
models.Q(('app_label', 'dcim'), ('model', 'interface')),
models.Q(('app_label', 'ipam'), ('model', 'fhrpgroup')),
models.Q(('app_label', 'virtualization'), ('model', 'vminterface')),
_connector='OR',
)
),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',

View File

@ -304,14 +304,6 @@ class Migration(migrations.Migration):
( (
'assigned_object_type', 'assigned_object_type',
models.ForeignKey( models.ForeignKey(
limit_choices_to=models.Q(
models.Q(
models.Q(('app_label', 'dcim'), ('model', 'interface')),
models.Q(('app_label', 'ipam'), ('model', 'vlan')),
models.Q(('app_label', 'virtualization'), ('model', 'vminterface')),
_connector='OR',
)
),
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
to='contenttypes.contenttype', to='contenttypes.contenttype',

View File

@ -33,7 +33,6 @@ class Migration(migrations.Migration):
name='scope_type', name='scope_type',
field=models.ForeignKey( field=models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(('model__in', ('region', 'sitegroup', 'site', 'location'))),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',

View File

@ -742,7 +742,6 @@ class IPAddress(ContactsMixin, PrimaryModel):
) )
assigned_object_type = models.ForeignKey( assigned_object_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
limit_choices_to=IPADDRESS_ASSIGNMENT_MODELS,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+', related_name='+',
blank=True, blank=True,

View File

@ -45,7 +45,6 @@ class VLANGroup(OrganizationalModel):
scope_type = models.ForeignKey( scope_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
on_delete=models.CASCADE, on_delete=models.CASCADE,
limit_choices_to=Q(model__in=VLANGROUP_SCOPE_TYPES),
blank=True, blank=True,
null=True null=True
) )

View File

@ -132,20 +132,6 @@ class Migration(migrations.Migration):
( (
'object_types', 'object_types',
models.ManyToManyField( models.ManyToManyField(
limit_choices_to=models.Q(
models.Q(
models.Q(
(
'app_label__in',
['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users'],
),
_negated=True,
),
models.Q(('app_label', 'auth'), ('model__in', ['group', 'user'])),
models.Q(('app_label', 'users'), ('model__in', ['objectpermission', 'token'])),
_connector='OR',
)
),
related_name='object_permissions', related_name='object_permissions',
to='contenttypes.ContentType', to='contenttypes.ContentType',
), ),

View File

@ -13,23 +13,6 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='objectpermission', model_name='objectpermission',
name='object_types', name='object_types',
field=models.ManyToManyField( field=models.ManyToManyField(related_name='object_permissions', to='core.objecttype'),
limit_choices_to=models.Q(
models.Q(
models.Q(
(
'app_label__in',
['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users'],
),
_negated=True,
),
models.Q(('app_label', 'auth'), ('model__in', ['group', 'user'])),
models.Q(('app_label', 'users'), ('model__in', ['objectpermission', 'token'])),
_connector='OR',
)
),
related_name='object_permissions',
to='core.objecttype',
),
), ),
] ]

View File

@ -28,22 +28,6 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='objectpermission', model_name='objectpermission',
name='object_types', name='object_types',
field=models.ManyToManyField( field=models.ManyToManyField(related_name='object_permissions', to='core.objecttype'),
limit_choices_to=models.Q(
models.Q(
models.Q(
(
'app_label__in',
['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users'],
),
_negated=True,
),
models.Q(('app_label', 'users'), ('model__in', ['objectpermission', 'token', 'group', 'user'])),
_connector='OR',
)
),
related_name='object_permissions',
to='core.objecttype',
),
), ),
] ]

View File

@ -3,7 +3,6 @@ from django.db import models
from django.urls import reverse from django.urls import reverse
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from users.constants import OBJECTPERMISSION_OBJECT_TYPES
from utilities.querysets import RestrictedQuerySet from utilities.querysets import RestrictedQuerySet
__all__ = ( __all__ = (
@ -31,7 +30,6 @@ class ObjectPermission(models.Model):
) )
object_types = models.ManyToManyField( object_types = models.ManyToManyField(
to='core.ObjectType', to='core.ObjectType',
limit_choices_to=OBJECTPERMISSION_OBJECT_TYPES,
related_name='object_permissions' related_name='object_permissions'
) )
actions = ArrayField( actions = ArrayField(

View File

@ -154,7 +154,6 @@ class Migration(migrations.Migration):
'role', 'role',
models.ForeignKey( models.ForeignKey(
blank=True, blank=True,
limit_choices_to={'vm_role': True},
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='virtual_machines', related_name='virtual_machines',

View File

@ -32,7 +32,6 @@ class Migration(migrations.Migration):
name='scope_type', name='scope_type',
field=models.ForeignKey( field=models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(('model__in', ('region', 'sitegroup', 'site', 'location'))),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',

View File

@ -82,7 +82,6 @@ class VirtualMachine(ContactsMixin, ImageAttachmentsMixin, RenderConfigMixin, Co
to='dcim.DeviceRole', to='dcim.DeviceRole',
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='virtual_machines', related_name='virtual_machines',
limit_choices_to={'vm_role': True},
blank=True, blank=True,
null=True null=True
) )

View File

@ -72,14 +72,6 @@ class Migration(migrations.Migration):
( (
'assigned_object_type', 'assigned_object_type',
models.ForeignKey( models.ForeignKey(
limit_choices_to=models.Q(
models.Q(
models.Q(('app_label', 'dcim'), ('model', 'interface')),
models.Q(('app_label', 'ipam'), ('model', 'vlan')),
models.Q(('app_label', 'virtualization'), ('model', 'vminterface')),
_connector='OR',
)
),
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
to='contenttypes.contenttype', to='contenttypes.contenttype',

View File

@ -8,7 +8,6 @@ from core.models import ObjectType
from netbox.models import NetBoxModel, PrimaryModel from netbox.models import NetBoxModel, PrimaryModel
from netbox.models.features import ContactsMixin from netbox.models.features import ContactsMixin
from vpn.choices import L2VPNStatusChoices, L2VPNTypeChoices from vpn.choices import L2VPNStatusChoices, L2VPNTypeChoices
from vpn.constants import L2VPN_ASSIGNMENT_MODELS
__all__ = ( __all__ = (
'L2VPN', 'L2VPN',
@ -93,7 +92,6 @@ class L2VPNTermination(NetBoxModel):
) )
assigned_object_type = models.ForeignKey( assigned_object_type = models.ForeignKey(
to='contenttypes.ContentType', to='contenttypes.ContentType',
limit_choices_to=L2VPN_ASSIGNMENT_MODELS,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+' related_name='+'
) )

View File

@ -4,7 +4,6 @@ import taggit.managers
from django.db import migrations, models from django.db import migrations, models
import utilities.json import utilities.json
import wireless.models
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -149,7 +148,6 @@ class Migration(migrations.Migration):
( (
'interface_a', 'interface_a',
models.ForeignKey( models.ForeignKey(
limit_choices_to=wireless.models.get_wireless_interface_types,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
to='dcim.interface', to='dcim.interface',
@ -158,7 +156,6 @@ class Migration(migrations.Migration):
( (
'interface_b', 'interface_b',
models.ForeignKey( models.ForeignKey(
limit_choices_to=wireless.models.get_wireless_interface_types,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',
to='dcim.interface', to='dcim.interface',

View File

@ -66,7 +66,6 @@ class Migration(migrations.Migration):
name='scope_type', name='scope_type',
field=models.ForeignKey( field=models.ForeignKey(
blank=True, blank=True,
limit_choices_to=models.Q(('model__in', ('region', 'sitegroup', 'site', 'location'))),
null=True, null=True,
on_delete=django.db.models.deletion.PROTECT, on_delete=django.db.models.deletion.PROTECT,
related_name='+', related_name='+',

View File

@ -123,26 +123,18 @@ class WirelessLAN(WirelessAuthenticationBase, CachedScopeMixin, PrimaryModel):
return WirelessLANStatusChoices.colors.get(self.status) return WirelessLANStatusChoices.colors.get(self.status)
def get_wireless_interface_types():
# Wrap choices in a callable to avoid generating dummy migrations
# when the choices are updated.
return {'type__in': WIRELESS_IFACE_TYPES}
class WirelessLink(WirelessAuthenticationBase, DistanceMixin, PrimaryModel): class WirelessLink(WirelessAuthenticationBase, DistanceMixin, PrimaryModel):
""" """
A point-to-point connection between two wireless Interfaces. A point-to-point connection between two wireless Interfaces.
""" """
interface_a = models.ForeignKey( interface_a = models.ForeignKey(
to='dcim.Interface', to='dcim.Interface',
limit_choices_to=get_wireless_interface_types,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+', related_name='+',
verbose_name=_('interface A'), verbose_name=_('interface A'),
) )
interface_b = models.ForeignKey( interface_b = models.ForeignKey(
to='dcim.Interface', to='dcim.Interface',
limit_choices_to=get_wireless_interface_types,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name='+', related_name='+',
verbose_name=_('interface B'), verbose_name=_('interface B'),