【发布时间】:2009-10-02 15:20:58
【问题描述】:
我想重构一些 django 应用程序,其中涉及将模型从一个应用程序移动到另一个可以更容易重用的应用程序。
其中许多模型与其他模型(例如用户)具有 ForeignKey 关系或 M2M 关系。例如:
class Department(models.Model):
name = models.CharField(max_length=255)
reviewers = models.ManyToManyField(User)
在大多数情况下,模型不会改变,所以我目前只是在新应用中重新定义了它们。这当然会导致相关名称出现问题,因为我在两个单独的应用程序中定义了相同的模型,并且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'.
执行此操作时,我还需要迁移保留任何自动生成的数据库 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()
当然,related_name 问题阻止了我这样做。
其他人如何使这种代码重构和迁移成为可能?谢谢!
【问题讨论】:
-
回复。您的评论:South 确实进行数据迁移,请参阅south.aeracode.org/wiki/Tutorial3
标签: python django django-models