如何将查询集添加到ManyToMany关系?

时间:2016-09-15 13:34:39

标签: python django django-queryset manytomanyfield

我有以下模特:

class EnMovielist(models.Model):
    content_ID = models.CharField(max_length=30)
    release_date = models.CharField(max_length=30)
    running_time = models.CharField(max_length=10)
    actress = models.CharField(max_length=300)
    series = models.CharField(max_length=30)
    studio = models.CharField(max_length=30, null=True)
    director = models.CharField(max_length=30)

    def __str__(self):
        return self.content_ID


class EnActress(models.Model):
    name = models.CharField(max_length=100, null=True)
    movielist = models.ManyToManyField(EnMovielist, related_name='movies')

    def __str__(self):
        return self.name

我在Django shell中尝试这个时出错了,

b = EnActress.objects.values_list('name', flat=True)
a = EnMovielist.objects.filter(actress__contains=b).values_list('content_ID')

b.movielist.add(a)



AttributeError: 'QuerySet' object has no attribute 'movielist'

如何将django queryset添加到多对多字段中? 我不知道为什么会发生这种情况..任何帮助表示赞赏! :)

2 个答案:

答案 0 :(得分:0)

您应该从实例调用m2m add,添加实体也应该是模型实例。否则你的表达没有意义。

b = EnActress.objects.get(pk=some_pk) # get an instance, not queryset
a = EnMovielist.objects.get(pk=some_pk) # also instance
b.movielist.add(a)

答案 1 :(得分:0)

如果您打算事后values_list建立新关系,则不应使用add。来自docs

  

values()values_list()都打算作为优化   特定用例:检索数据的子集而不使用   创建模型实例的开销

[强调我的]

如果没有很好地描述你想要达到的目标,很难说清楚你要做什么。

相关问题