我的型号:
class Book(models.Model):
title = models.CharField(max_length=254)
subtitle = models.CharField(max_length=254, null=True, blank=True)
subjects = models.ManyToManyField(Subject)
class Subject(models.Model):
name = models.CharField(max_length=255)
description = models.CharField(max_length=254, null=True, blank=True)
这里的图书主题是以多对多关系为主题的模式。你知道吗
我怎样才能让所有的书都有相同的相关主题呢。 例如,所有主题id为[2,3,6]的书籍
带有
Q
对象的解决方案不起作用。你知道吗一些初始数据:
让我们首先用
subjects__in=[s1,s2,s3]
检查一下简单的方法。因此,我们只寻找一本书,因为只有b3
包含所有主题。你知道吗我们只是在搜索含有
s1
或s2
或s3
的books
。这就是为什么我们得到这样的结果。我们有重复的结果,因为我们没有使用.distinct()
现在让我们试试
Q
对象。你知道吗我只想提一下:
同:
只是一个更具动态性的版本,您可以轻松地用
subjects
更改列表。你知道吗我们得到了一个空的结果集。如果您检查查询,这将是正常的。一行不能同时包含三个不同的
subject_id
值。 我们得到这样一个查询的原因是因为我们在一个.filter
语句中同时应用了所有的Q
过滤器。在Spanning multi-valued relationships上阅读更多关于这个的信息。你知道吗为了从
MySQL
的角度获得正确的结果,我们必须为每个要筛选的subject
加入subjects_book_subjects
表。在ORM
透视图中,这可以通过一系列连续的.filter
语句来实现:从更时尚的角度来看:
例如:
相关问题 更多 >
编程相关推荐