mysql-Django将AND和OR查询与ManyToMany字段组合
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-Django将AND和OR查询与ManyToMany字段组合,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1600字,纯文字阅读大概需要3分钟。
内容图文
![mysql-Django将AND和OR查询与ManyToMany字段组合](/upload/InfoBanner/zyjiaocheng/888/3eb759f5765c4ddaa9dc211f57040a8f.jpg)
希望有人可以帮我这个忙.
我试图弄清楚是否可以构造一个查询,该查询将允许我同时基于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年代喜剧”.在这种情况下,我希望标签包含“ 80s”和“喜剧”的所有项目.
现在,我知道如何为每个独立构造查询.对于#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字段组合全部内容,希望文章能够帮你解决mysql-Django将AND和OR查询与ManyToMany字段组合所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。