【问题标题】:Django queryset to filter objects with identical manytomany fieldDjango 查询集过滤具有相同多对多字段的对象
【发布时间】:2020-06-16 19:40:00
【问题描述】:

我有一个这样的模型。

class Component(models.Model):
     options = models.ManyToManyField('prices.Option')
     period = models.IntegerField()

我需要选择与一个组件cmp具有相同周期和相同选项的所有组件。此查询集不起作用。

similar_components = Component.objects.filter(period=cmp.period, options=cmp.options)

我找不到基于这个多对多字段 options 的查询集的方法。

【问题讨论】:

  • 你能试试这个吗,similar_components = Component.objects.filter(period=cmp.period, options=[cmp.options])
  • @kamilyrb 这行不通。我现在会更正我的答案
  • 你可以看看this。您的问题有答案。

标签: django many-to-many django-queryset


【解决方案1】:

Many-to-many relationships

from django.db.models import Q

options = cmp.options.all()
filter_kwargs = (Q(options=option) for option in options)
similar_components = Component.objects.filter(period=cmp.period).filter(*filter_kwargs)

【讨论】:

  • 他想要相同的选项,此查询返回包含 cmp.options 的组件。但也有额外的选择。
猜你喜欢
  • 2013-08-18
  • 1970-01-01
  • 2015-01-11
  • 2018-01-03
  • 2011-04-07
  • 2019-09-27
  • 2018-05-10
  • 2017-03-09
  • 2018-01-05
相关资源
最近更新 更多