Django 查询集过滤具有相同多对多字段的对象
Posted
技术标签:
【中文标题】Django 查询集过滤具有相同多对多字段的对象【英文标题】:Django queryset to filter objects with identical manytomany field 【发布时间】: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。您的问题有答案。 【参考方案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 的组件。但也有额外的选择。以上是关于Django 查询集过滤具有相同多对多字段的对象的主要内容,如果未能解决你的问题,请参考以下文章