我需要创建自己的中间模型.
class class1(models.Model) 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:不能在指定中间模型的ManyToManyField上使用add().
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"属性.
我究竟做错了什么 ?有解决方案吗
Tks all.
据我所知,类中的auto_created
属性Meta
没有记录,所以你应该避免使用它.
如上所述AttributeError
,不可能用于使用add()
中间模型的多对多领域.正确的解决方法是创建中间模型的实例,而不是使用add()
.
class3.objects.create(field_1=c1, field_2=c2, field_3=1).
有关详细信息,请参阅多对多关系中额外字段的文档.