gpt4 book ai didi

python - Django模型重构和迁移

转载 作者:行者123 更新时间:2023-11-28 21:30:46 25 4
gpt4 key购买 nike

我想以一种涉及将模型从一个应用程序移动到另一个应用程序的方式重构许多 django 应用程序,以便更容易地重用它们。

其中许多模型与其他模型(例如用户)具有外键关系或 M2M 关系。例如:

class Department(models.Model):
name = models.CharField(max_length=255)
reviewers = models.ManyToManyField(User)

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

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()

当然,lated_name 问题阻止我这样做。

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

最佳答案

您是否考虑过使用迁移工具,例如 Southdjango-evolution

关于python - Django模型重构和迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1510215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com