在Django中可以使用多对多关系之前,对象需要具有字段“id”的值

时间:2017-05-02 17:50:24

标签: python django django-models django-related-manager

我的 models.py

中有以下代码
class Tag(models.Model):
    name = models.CharField(max_length=75)

class Article(models.Model):
    tags = models.ManyToManyField(Tag)

    def save(self, *args, **kwargs):
        for tag in self.tags:
            print tag.name
        super(Article, self).save(*args, **kwargs)

当我尝试从管理面板创建文章时,出现以下错误:

ValueError: "<Article>" needs to have a value for field "id" before this many-to-many relationship can be used.

如何解决此问题?我需要在保存文章之前访问并重复标记。谢谢!

2 个答案:

答案 0 :(得分:2)

你的宣言

form.save_m2m()

应该在

之后
obj.save()

保存对象后,很多对很多字段都会添加

答案 1 :(得分:1)

你的模特如下:

class Tag(models.Model):
    name = models.CharField(max_length=75)

class Article(models.Model):
    tags = models.ManyToManyField(Tag)

    def save(self, *args, **kwargs):
        for tag in self.tags:
            print tag.name
        super(Article, self).save(*args, **kwargs)

如果要创建带有标签的文章实例,首先应创建实例,然后添加tags,如下所示:

article = Article.objects.create()

tags = [tag_instance1, tag_instance2, tag_instance3 ...]

article.tags.set(tags)

article.tags.add(tag_instance)