【问题标题】:Django filter objects with at least one many-to-many having attribute of valueDjango过滤对象至少有一个多对多的属性值
【发布时间】:2014-03-28 09:23:29
【问题描述】:

我希望使用 Django 的 ORM 做一个复杂的过滤器。

型号:

class Book(models.Model):
    title = models.TextField()
    bestseller = models.BooleanField(default=False)

class Author(models.Model):
    name = models.TextField()
    books = models.ManytoManyField(Book)

如何查询至少拥有一本畅销书的所有作者?

查询:

best_authors = Author.objects.filter(<relevant filter>)

编辑:

根据documentation,以下应该可以工作:

best_authors = Author.objects.filter(books__bestseller=True)

不幸的是,这最终会返回重复的作者对象(他/她的每本畅销书都是同一作者,一遍又一遍)。

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:
    best_authors = Author.objects.filter(books__bestseller=True).distinct()
    

    filter()Books 表执行JOIN,并生成bestseller==True 所在的所有行。 distinct() 确保每个作者在结果中只列出一次。

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 2012-03-24
      • 1970-01-01
      • 2020-04-21
      • 2016-07-23
      • 2019-04-03
      相关资源
      最近更新 更多