Hay,我有一个模板,里面有一块板子
class Board(models.Model):
parent_board = models.ForeignKey('self', blank=True, null=True)
每块板都可以属于另一块板
所以说
Linux
Windows
OS X
可以属于名为
的董事会Computing
这些板包含一个Thread对象
class Thread(models.Model):
board = models.ForeignKey(Board)
现在,假设我将一个线程分配给Windows板,我可以轻松获得此对象。
但我想列出与计算相关的所有主题
线程属于Windows板,但它也将通过关联属于计算板。
如何在计算板上运行查询并从其子板中检索所有线程(以及任何属于计算线程的线程)?
我已经完成了,但它非常粗糙,我想知道是否有更多的Django方式吗
此刻(工作)是我的代码
listings = [] # blank list to hold clean values
for board in board.board_set.all(): # for each board
for listing in board.listing_set.all(): # get the listing from each board
listings.append( listing ) # append to the listings list
答案 0 :(得分:2)
[你的qn显示'Thread'模型,但接着在你的wokring代码中引用'listing_set' - 我认为这是一个错字?]
您可以使用Q对象。假设您的Board模型有一个包含董事会名称的“名称”字段,我相信以下内容应该有效:
from django.db.models import Q
Thread.objects.filter(Q(board__parent_board__name='Computing') | Q(name='Computing'))
第一个Q对象选择作为电路板一部分的线程,其中'parent_board'设置为名为'Computing'的电路板。第二个Q对象选择直接属于电路板名称为“Computing”的线程。