Coverage for src/backend/InvenTree/part/migrations/0116_auto_20231023_0332.py: 37%
33 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
1# Generated by Django 3.2.22 on 2023-10-23 03:32
3from django.db import migrations
6def migrate_part_responsible_owner(apps, schema_editor):
7 """Copy existing part.responsible field to part.responsible_owner"""
9 Owner = apps.get_model('users', 'Owner')
10 Part = apps.get_model('part', 'Part')
11 User = apps.get_model('auth', 'user')
12 ContentType = apps.get_model('contenttypes', 'contenttype')
14 user_type = ContentType.objects.get_for_model(User)
16 parts = Part.objects.exclude(responsible=None)
18 for part in parts: 18 ↛ 21line 18 didn't jump to line 21 because the loop on line 18 never started
20 # Find a corresponding Owner object, or create one if it does not exist
21 owner, _created = Owner.objects.get_or_create(
22 owner_type=user_type,
23 owner_id=part.responsible.id,
24 )
26 part.responsible_owner = owner
27 part.save()
29 if parts.count() > 0: 29 ↛ 30line 29 didn't jump to line 30 because the condition on line 29 was never true
30 print(f"Added 'responsible_owner' for {parts.count()} parts")
33def reverse_owner_migration(apps, schema_editor):
34 """Reverse the owner migration:
36 - Set the 'responsible' field to a selected user
37 - Only where 'responsible_owner' is set
38 - Only where 'responsible_owner' is a User object
39 """
41 Part = apps.get_model('part', 'Part')
42 User = apps.get_model('auth', 'user')
43 ContentType = apps.get_model('contenttypes', 'contenttype')
45 user_type = ContentType.objects.get_for_model(User)
47 parts = Part.objects.exclude(responsible_owner=None)
49 for part in parts:
51 if part.responsible_owner.owner_type == user_type:
53 # Attempt to find matching user
54 try:
55 user = User.objects.get(pk=part.responsible_owner.owner_id)
56 part.responsible = user
57 part.save()
58 except User.DoesNotExist:
59 print("User does not exist:", part.responsible_owner.owner_id)
61 if parts.count() > 0:
62 print(f"Added 'responsible' for {parts.count()} parts")
64class Migration(migrations.Migration):
66 dependencies = [
67 ('part', '0115_part_responsible_owner'),
68 ('users', '0005_owner_model'),
69 ]
71 operations = [
72 migrations.RunPython(
73 migrate_part_responsible_owner,
74 reverse_code=reverse_owner_migration,
75 )
76 ]