我正在寻找一种方法来使用Django查询工具返回符合某些条件的对象列表,这些条件可能与一组相关对象有关。这就是我的意思:
class Book(models.Model):
name = models.CharField(max_length=100)
class Chapter(models.model):
name = models.CharField(max_length=100)
book = models.ForeignKey(Book)
length = models.IntegerField(default=0)
在此查询中,我想要检索每个组件Books
都有Chapter
的所有length > 100
。
我意识到我可以做类似的事情:
for book in Book.objects.all():
for chapter in book.chapter_set.all():
{do whatever to record if this chapter is valid/invalid}
然而,这显然是接近它的最天真的方式。我确信这是一种避免嵌套for
循环的好方法,但我想避免首先迭代每个对象。
有没有办法可以使用各种Django工具来构建利用chapter_set
中对象属性的查询?我无法在以这种方式工作的文档中找到任何内容 - 每个示例都使用一个特定实例的_set
而不是将其合并为查询。
例如,我认为以下SQL会直接完成我在这里尝试做的事情(直到我稍后再回到我的计算机上,这可能是未经测试的,也许单独的子选择会起作用):
select * from book b, (select book_id
from chapter
group by book_id
having min(length) = 100 ) x
where b.book_id = x.book_id;
我也试图避免使用原始SQL,所以即使这个(或它的某个版本)有效,我也希望通过找出它将如何转换为更多来了解Django查询功能。 filter()
,F()
,Q()
等表达式的某种组合。
答案 0 :(得分:0)
您可以尝试查询所有Book
s,但至少有Chapter
且length
小于或等于100的那些books = Book.objects.exclude(chapter__length__le=100)
。例如:
onPlayerMove