- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
希望有人能帮我解决这个问题。
我想弄清楚我是否可以构建一个查询,允许我同时基于 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 对象来构建需要项目的 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/
我是一名优秀的程序员,十分优秀!