我想为(django)多对多表自动输入字段“ id”

时间:2019-03-05 16:33:19

标签: django python-3.x

在尝试添加具有多对多关系的模型实例时,我遇到了“ 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,

1 个答案:

答案 0 :(得分:0)

您在这里混淆了两件事:

  • 具有多对多关系,当连接两个对象时,两个对象都必须已经保存到数据库中(具有主键),因为在内部,Django创建了第三个指向两个对象的对象。对象来连接它们。假设id是主键,则只有两个都有id时,它才能这样做。

  • 在创建对象时,不必显式设置id(实际上不应该如此)。默认情况下,django Model会将id设置为自动字段和主键(您可以通过指定自己的pk来覆盖它,但通常不需要这样做)。第一次保存模型时,会自动创建id

您看到了此错误,因为在连接它们之前,可能其中一个对象(思想或类别)没有保存到数据库中。在您的代码示例中,您不必传递id=5,它不需要它就可以工作,因为在连接之前先保存id2category