6

我的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.

我该如何解决这个问题?在保存文章之前,我需要访问和迭代标签。谢谢!

4

2 回答 2

3

您的声明

form.save_m2m()

应该在之后

obj.save()

保存对象后多对多字段将添加

于 2017-08-17T09:30:06.153 回答
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)

当你想创建一个带有标签的 Article 实例时,你应该首先创建实例,然后添加tags,如下所示:

article = Article.objects.create()

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

article.tags.set(tags)

或者

article.tags.add(tag_instance)
于 2018-05-04T09:08:55.930 回答