gpt4 book ai didi

python - 如何在 Django 中正确使用 auto_created 属性?

转载 作者:太空狗 更新时间:2023-10-29 20:16:44 25 4
gpt4 key购买 nike

我需要创建自己的中间模型。

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:无法在指定中间模型的 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(中间类),并删除 through class2field1 中的 属性。

我做错了什么?有什么解决办法吗?

谢谢大家。

最佳答案

据我所知,Meta 类中的 auto_created 属性没有记录,因此您应该避免使用它。

正如 AttributeError 所说,对于使用中间模型的多对多字段,不可能使用 add()。正确的解决方法是创建中间模型的实例,而不是使用 add()

class3.objects.create(field_1=c1, field_2=c2, field_3=1).

请参阅 extra fields in many to many relationships 上的文档了解更多信息。

关于python - 如何在 Django 中正确使用 auto_created 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34394323/

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