希望有人能帮助我解决这个问题。Django结合AND和OR查询ManyToMany字段
我想弄清楚我是否可以构建一个查询,允许我从我的数据库同时检索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
我想建基于两个条件的检索项的查询次数:由用户上传,用户是继
项目(称为'品牌')。因此,例如,如果用户正在关注派拉蒙用户帐户,我希望品牌=派拉蒙的所有商品。
与保存的搜索中的关键字相匹配的项目。例如,用户可以制作并保存以下搜索:“80年代喜剧”。在这种情况下,我希望标签中包含“80年代”和“喜剧”的所有项目。
现在我知道如何构建每个独立的查询。对于#1,它是:
items = Item.objects.filter(brand=brand)
而对#2(基于文档):
items = Item.objects.filter(tags__name='80s').filter(tags__name='comedy')
我的问题是:是否有可能兴建这个作为一个单一的查询,使我不不得不把每个查询转换成一个列表,加入他们,并删除重复?
这个挑战似乎是,无法使用Q对象来构建查询,以便在需要项目的多个字段(在此情况下是标记)中匹配多个值。以下查询:
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)
提前感谢您对此有所帮助!
您是否希望将两个条件'与AND连接'? – arustgi 2011-06-03 20:20:12
嗨Arustgi,我实际上需要每个标准加入一个或。因此,继续上面的例子,我会寻找所有品牌(品牌='品牌')OR(tag_name ='80s'和tag__name ='喜剧') – 2011-06-03 21:44:19