【问题标题】:How to add queryset to ManyToMany relationship?如何将查询集添加到多对多关系?
【发布时间】:2016-09-15 13:34:39
【问题描述】:

我有以下型号:

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 查询集添加到多对多字段中? 我不知道为什么会这样。任何帮助表示赞赏! :)

【问题讨论】:

  • 如果您仍然需要使用查询集,那么您不应该使用values_list,您显示的代码没有多大意义,我不确定它试图实现什么

标签: python django django-queryset manytomanyfield


【解决方案1】:

如果您以后打算add 一个新关系,则不应使用values_list。来自docs

values()values_list() 都是为了优化 一个特定的用例:检索数据子集没有 创建模型实例的开销

[强调我的]

如果没有很好地描述你想要实现的目标,就很难说出你在做什么。

【讨论】:

    【解决方案2】:

    您应该从实例调用 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)
    

    【讨论】:

      猜你喜欢
      • 2019-07-01
      • 2021-06-11
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2021-01-19
      相关资源
      最近更新 更多