在尝试添加具有多对多关系的模型实例时,我遇到了“ ValueError”。 ValueError:“(Idea:hey)”必须具有字段“ id”的值,然后才能使用此多对多关系。 此处给出了很多答复,但没有帮助。我的解决方案是“手动”输入“ id”值。
>>> import django
>>> django.setup()
>>> from myapp1.models import Category, Idea
>>> id2=Idea.objects.create(
... title_en='tre',
... subtitle_en='ca',
... description_en='mata',
... id=5,
... is_original=True,
... )
>>> id2.save()
>>> cat22=Category(title_en='yo')
>>> cat22.save()
>>> id2.categories.add(cat22)
>>> Idea.objects.all()
<QuerySet [<Idea: tre>]>
>>> exit()
请注意,我手动添加了一个“ id”。 如何命令django自动添加“ id”字段? 注意:我尝试添加“ autoField”,但失败了,谢谢
@python_2_unicode_compatible
class Idea(UrlMixin, CreationModificationDateMixin, MetaTagsMixin):
id = models.IntegerField(primary_key=True,)
title = MultilingualCharField(_("Title"), max_length=200,)
subtitle = MultilingualCharField(_("Subtitle"), max_length=200, blank=True,)
description = MultilingualTextField(_("Description"), blank=True,)
is_original = models.BooleanField(_("Original"), default=False,)
categories = models.ManyToManyField(Category,
答案 0 :(得分:0)
您在这里混淆了两件事:
具有多对多关系,当连接两个对象时,两个对象都必须已经保存到数据库中(具有主键),因为在内部,Django创建了第三个指向两个对象的对象。对象来连接它们。假设id
是主键,则只有两个都有id
时,它才能这样做。
在创建对象时,不必显式设置id
(实际上不应该如此)。默认情况下,django Model
会将id
设置为自动字段和主键(您可以通过指定自己的pk来覆盖它,但通常不需要这样做)。第一次保存模型时,会自动创建id
。
您看到了此错误,因为在连接它们之前,可能其中一个对象(思想或类别)没有保存到数据库中。在您的代码示例中,您不必传递id=5
,它不需要它就可以工作,因为在连接之前先保存id2
和category
。