mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
* Rename sequences & indexes after renaming users table * Migrate from auth.Group to a custom group model * Delete original groups from auth_group table * Update object & multi-object custom fields referencing the Group model * Fix ContentType resolution * Clean up obsolete logic for view/serializer resolution
This commit is contained in:
80
netbox/users/migrations/0006_custom_group_model.py
Normal file
80
netbox/users/migrations/0006_custom_group_model.py
Normal file
@@ -0,0 +1,80 @@
|
||||
import users.models
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
def update_custom_fields(apps, schema_editor):
|
||||
"""
|
||||
Update any CustomFields referencing the old Group model to use the new model.
|
||||
"""
|
||||
ContentType = apps.get_model('contenttypes', 'ContentType')
|
||||
CustomField = apps.get_model('extras', 'CustomField')
|
||||
Group = apps.get_model('users', 'Group')
|
||||
|
||||
if old_ct := ContentType.objects.filter(app_label='users', model='netboxgroup').first():
|
||||
new_ct = ContentType.objects.get_for_model(Group)
|
||||
CustomField.objects.filter(object_type=old_ct).update(object_type=new_ct)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0005_alter_user_table'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# Create the new Group model & table
|
||||
migrations.CreateModel(
|
||||
name='Group',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=150, unique=True)),
|
||||
('description', models.CharField(blank=True, max_length=200)),
|
||||
('permissions', models.ManyToManyField(blank=True, related_name='groups', related_query_name='group', to='auth.permission')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'group',
|
||||
'verbose_name_plural': 'groups',
|
||||
},
|
||||
managers=[
|
||||
('objects', users.models.NetBoxGroupManager()),
|
||||
],
|
||||
),
|
||||
|
||||
# Copy existing groups from the old table into the new one
|
||||
migrations.RunSQL(
|
||||
"INSERT INTO users_group (SELECT id, name, '' AS description FROM auth_group)"
|
||||
),
|
||||
|
||||
# Update the sequence for group ID values
|
||||
migrations.RunSQL(
|
||||
"SELECT setval('users_group_id_seq', (SELECT MAX(id) FROM users_group))"
|
||||
),
|
||||
|
||||
# Update the "groups" M2M fields on User & ObjectPermission
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='groups',
|
||||
field=models.ManyToManyField(blank=True, related_name='users', related_query_name='user', to='users.group'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='objectpermission',
|
||||
name='groups',
|
||||
field=models.ManyToManyField(blank=True, related_name='object_permissions', to='users.group'),
|
||||
),
|
||||
|
||||
# Delete groups from the old table
|
||||
migrations.RunSQL(
|
||||
"DELETE from auth_group"
|
||||
),
|
||||
|
||||
# Update custom fields
|
||||
migrations.RunPython(
|
||||
code=update_custom_fields,
|
||||
reverse_code=migrations.RunPython.noop
|
||||
),
|
||||
|
||||
# Delete the proxy model
|
||||
migrations.DeleteModel(
|
||||
name='NetBoxGroup',
|
||||
),
|
||||
]
|
Reference in New Issue
Block a user