gpt4 book ai didi

mysql - Django 将 AND 和 OR 查询与 ManyToMany 字段结合起来

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:29 25 4
gpt4 key购买 nike

希望有人能帮我解决这个问题。

我想弄清楚我是否可以构建一个查询,允许我同时基于 ForeignKey 字段和 ManyToManyField 从我的数据库中检索项目。具有挑战性的部分是它需要过滤多个 ManyToMany 对象。

一个例子有望使这一点更清楚。这是我的(简化的)模型:

class Item(models.Model):
name = models.CharField(max_length=200)
brand = models.ForeignKey(User, related_name='brand')
tags = models.ManyToManyField(Tag, blank=True, null=True)
def __unicode__(self):
return self.name
class Meta:
ordering = ['-id']

class Tag(models.Model):
name = models.CharField(max_length=64, unique=True)
def __unicode__(self):
return self.name

我想构建一个基于两个条件检索项目的查询:

  1. 用户正在关注的由用户上传的项目(在模型中称为“品牌”)。因此,例如,如果用户关注派拉蒙用户帐户,我会想要品牌 = 派拉蒙的所有项目。

  2. 与已保存搜索中的关键字匹配的项目。例如,用户可以进行并保存以下搜索:“80 年代喜剧”。在这种情况下,我想要所有标签同时包含“80 年代”和“喜剧”的项目。

现在我知道如何为每个独立构造查询。对于 #1,它是:

items = Item.objects.filter(brand=brand)

对于#2(基于文档):

items = Item.objects.filter(tags__name='80s').filter(tags__name='comedy')

我的问题是:是否可以将其构造为单个查询,这样我就不必将每个查询转换为列表、加入它们并删除重复项?

挑战似乎是没有办法使用 Q 对象来构建需要项目的 manytomany 字段(在本例中为标签)以匹配多个值的查询。以下查询:

items = Item.objects.filter(Q(tags__name='80s') & Q(tags__name='comedy')) 

不起作用。

(参见:https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships)

在此先感谢您的帮助!

最佳答案

经过大量研究后,我找不到将其组合成单个查询的方法,所以我最终将我的 QuerySet 转换成列表并将它们组合起来。

关于mysql - Django 将 AND 和 OR 查询与 ManyToMany 字段结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com