From abeed474f674c4b6ad2d4d9dfc2fe2d3b87c485f Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 9 May 2025 14:21:02 -0400 Subject: [PATCH] Fixes #19444: Fix changeloggin for contact group assignments --- .../0020_remove_contactgroupmembership.py | 71 +++++++++++++++++++ netbox/tenancy/models/contacts.py | 14 ---- 2 files changed, 71 insertions(+), 14 deletions(-) create mode 100644 netbox/tenancy/migrations/0020_remove_contactgroupmembership.py diff --git a/netbox/tenancy/migrations/0020_remove_contactgroupmembership.py b/netbox/tenancy/migrations/0020_remove_contactgroupmembership.py new file mode 100644 index 000000000..40638b427 --- /dev/null +++ b/netbox/tenancy/migrations/0020_remove_contactgroupmembership.py @@ -0,0 +1,71 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tenancy', '0019_contactgroup_comments_tenantgroup_comments'), + ] + + operations = [ + migrations.SeparateDatabaseAndState( + state_operations=[ + # Remove the "through" models from the M2M field + migrations.AlterField( + model_name='contact', + name='groups', + field=models.ManyToManyField( + blank=True, + related_name='contacts', + related_query_name='contact', + to='tenancy.contactgroup' + ), + ), + # Remove the ContactGroupMembership model + migrations.DeleteModel( + name='ContactGroupMembership', + ), + ], + database_operations=[ + # Rename ContactGroupMembership table + migrations.AlterModelTable( + name='ContactGroupMembership', + table='tenancy_contact_groups', + ), + # Rename the 'group' column (also renames its FK constraint) + migrations.RenameField( + model_name='contactgroupmembership', + old_name='group', + new_name='contactgroup', + ), + # Rename PK sequence + migrations.RunSQL( + 'ALTER TABLE tenancy_contactgroupmembership_id_seq ' + 'RENAME TO tenancy_contact_groups_id_seq' + ), + # Rename indexes + migrations.RunSQL( + 'ALTER INDEX tenancy_contactgroupmembership_pkey ' + 'RENAME TO tenancy_contact_groups_pkey' + ), + migrations.RunSQL( + 'ALTER INDEX tenancy_contactgroupmembership_contact_id_04a138a7 ' + 'RENAME TO tenancy_contact_groups_contact_id_84c9d84f' + ), + migrations.RunSQL( + 'ALTER INDEX tenancy_contactgroupmembership_group_id_bc712dd0 ' + 'RENAME TO tenancy_contact_groups_contactgroup_id_5c8d6c5a' + ), + migrations.RunSQL( + 'ALTER INDEX unique_group_name ' + 'RENAME TO tenancy_contact_groups_contact_id_contactgroup_id_f4434f2c_uniq' + ), + # Rename foreign key constraint for contact_id + migrations.RunSQL( + 'ALTER TABLE tenancy_contact_groups ' + 'RENAME CONSTRAINT tenancy_contactgroup_contact_id_04a138a7_fk_tenancy_c ' + 'TO tenancy_contact_grou_contact_id_84c9d84f_fk_tenancy_c' + ), + ], + ), + ] diff --git a/netbox/tenancy/models/contacts.py b/netbox/tenancy/models/contacts.py index 5f39fe0db..34e444ee7 100644 --- a/netbox/tenancy/models/contacts.py +++ b/netbox/tenancy/models/contacts.py @@ -13,7 +13,6 @@ __all__ = ( 'ContactAssignment', 'Contact', 'ContactGroup', - 'ContactGroupMembership', 'ContactRole', ) @@ -51,7 +50,6 @@ class Contact(PrimaryModel): groups = models.ManyToManyField( to='tenancy.ContactGroup', related_name='contacts', - through='tenancy.ContactGroupMembership', related_query_name='contact', blank=True ) @@ -97,18 +95,6 @@ class Contact(PrimaryModel): return self.name -class ContactGroupMembership(models.Model): - group = models.ForeignKey(ContactGroup, related_name="+", on_delete=models.CASCADE) - contact = models.ForeignKey(Contact, related_name="+", on_delete=models.CASCADE) - - class Meta: - constraints = [ - models.UniqueConstraint(fields=['group', 'contact'], name='unique_group_name') - ] - verbose_name = _('contact group membership') - verbose_name_plural = _('contact group memberships') - - class ContactAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLoggedModel): object_type = models.ForeignKey( to='contenttypes.ContentType',