Django模型重构和迁移

Bra*_*ery 2 python django django-models

我想重构一些django应用程序,其方式是将模型从一个应用程序移动到另一个应用程序,以便更容易重用.

许多这些模型与其他模型(例如用户)具有ForeignKey关系或M2M关系.例如:

class Department(models.Model):
    name = models.CharField(max_length=255)
    reviewers = models.ManyToManyField(User)
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,模型不会改变,所以我现在只是在新的应用程序中重新定义它们.这当然会导致related_name出现问题,因为我在两个独立的应用程序中定义了相同的模型,并manage.py syncdb给出以下错误:

new_app.department: Accessor for m2m field 'reviewers' clashes with related m2m field 'User.department_set'. Add a related_name argument to the definition for 'reviewers'.
old_app.department: Accessor for m2m field 'reviewers' clashes with related m2m field 'User.department_set'. Add a related_name argument to the definition for 'reviewers'.
Run Code Online (Sandbox Code Playgroud)

执行此操作时,我还需要迁移数据,以保留任何自动生成的数据库ID.我计划使用ORM进行迁移,认为以下内容可行:

from newapp.models import Department
import oldapp.models as old

for obj in old.Department.objects.all():
    new_obj = Department(id=obj.id, name=obj.name)
    new_obj.save()
    for r in obj.reviewers.all():
        new_obj.reviewers.add(r)
    new_obj.save()
Run Code Online (Sandbox Code Playgroud)

当然,这个related_name问题使我不能这样做.

其他人如何使这种代码重构和迁移成为可能?谢谢!

Vin*_*jip 6

您是否考虑过使用南方django-evolution等迁移工具?