从查询集中获取唯一的多对多记录列表

Posted

技术标签:

【中文标题】从查询集中获取唯一的多对多记录列表【英文标题】:Get list of Unique many-to-many records from a queryset 【发布时间】:2011-03-01 11:33:28 【问题描述】:

我的模型:

class Order(models.Model):
    ordered_by = models.ForeignKey(User)
    reasons = models.ManyToManyField(Reason)
class Reason(models.Model):
    description = models.CharField()

基本上,用户创建一个订单并给出该订单的原因。即,john 有两个订单(一个是铅笔订单,因为他不在,另一个是因为他不喜欢他目前的库存。第二个订单是钢笔,因为他不在了)。

我想打印一份用户下订单的所有原因的列表。所以在 john 下,应该打印“he is out”、“he doesn't like his current stock”;只有这两行。如果我简单地选择 john 的所有订单,遍历它们并打印出他们的“原因”,它会打印“he is out”、“he doesn't like his current stock”,然后再次打印“he is out”。我不想要这些重复的值。

如何选择他所有订单的原因列表,以便该列表包含所有唯一行?

【问题讨论】:

【参考方案1】:
Reason.objects.filter(order__ordered_by=john).distinct()

【讨论】:

以上是关于从查询集中获取唯一的多对多记录列表的主要内容,如果未能解决你的问题,请参考以下文章

从所有记录中获取所有相关的多对多,而不是从每个记录 laravel

在 TypeORM 与 GraphQL 的多对多关系上使用数据加载器,查询多对多

查询集中相关多对多字段的具体加载

如何过滤多对多字段的模型?

如何在 django 中过滤查询集的多对多

Django - 查询列表中的任何项目在多对多字段中的任何对象