【发布时间】:2016-03-27 10:44:15
【问题描述】:
我需要创建自己的中间模型。
class class1(models.Model):
pass
class class2(models.Model):
field1 = models.ManyToManyField(class1, through="class3")
class class3(models.Model):
field1 = models.ForeignKey(class1)
field2 = models.ForeignKey(class2)
field3 = models.IntegerField()
class Meta:
auto_created = True
我使用auto_created=True,因为在下面的代码中,我遇到了错误:
AttributeError: Cannot use add() on a ManyToManyField which specifies an intermediary model.
for m2m_field in self._meta.many_to_many:
for m2m_link in getattr(self, m2m_field.get_attname()).all():
getattr(to_object, m2m_field.get_attname()).add(m2m_link)
现在它可以正常工作了,但是当我尝试执行 makemigration 时,django 想要删除我的 class3(中间类),并删除 class2 中 field1 中的 through 属性。
我做错了什么?有什么解决办法吗?
谢谢。
【问题讨论】:
-
我有完全相同的问题,这是我的解决方案(参考:stackoverflow.com/questions/28693691/…)你可以运行“makemigrations”来获取自动生成的脚本,然后覆盖那里的应用和取消应用方法,这样当你运行“迁移”命令,这些操作将不会运行。
-
在某些情况下,您可以使用this trick 来获得
auto_created行为,而不会影响您的迁移。
标签: python django django-models many-to-many