我想以一種方式重構一些Django應用程序,包括將模型從一個應用程序移動到另一個可以更容易重用的模型。Django模型重構和遷移
許多這些模型具有與其他模型(如用戶)的ForeignKey關係或M2M關係。例如:
class Department(models.Model):
name = models.CharField(max_length=255)
reviewers = models.ManyToManyField(User)
在大多數情況下,模型不會改變,所以我目前只是在新應用中重新定義了它們。當然,這會導致問題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'.
做這件事時,我還需要遷移數據保留任何自動生成數據庫IDS。我計劃使用的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
問題不允許我這樣做。
其他人如何讓這類代碼重構和遷移成爲可能?謝謝!
Re。您的評論:South做了數據遷移,請參閱http://south.aeracode.org/wiki/Tutorial3 – 2009-10-02 17:00:44