首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Many2ManyField获取QuerySets (包括相关字段)

从Many2ManyField获取QuerySets (包括相关字段)
EN

Stack Overflow用户
提问于 2010-06-15 22:12:42
回答 1查看 93关注 0票数 1

嘿,我有一个模型,里面有一块冲浪板

代码语言:javascript
复制
class Board(models.Model):
    parent_board = models.ForeignKey('self', blank=True, null=True)

每个板子可以属于另一个板子

可以这么说

代码语言:javascript
复制
Linux
Windows
OS X

可以属于一个名为

代码语言:javascript
复制
Computing

这些板包含一个Thread对象

代码语言:javascript
复制
class Thread(models.Model):
    board = models.ForeignKey(Board)

现在,假设我给Windows板分配了一个线程,我可以很容易地获得这个对象。

但是我想列出与计算相关的所有线程

线程属于Windows板卡,但通过关联也将属于计算板。

如何在计算板上运行查询并从其子板中检索所有线程(以及只属于计算线程的任何线程)?

我做过,但它非常粗糙,我想知道是否有更多的Django方式来做它

这是我目前的代码(工作)

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-15 23:12:41

你的qn显示了一个‘线程’模型,但接着在你的唤醒代码中引用了'listing_set‘--我猜这是一个拼写错误?

您可以使用Q对象。假设您的Board模型有一个包含板名称的' name‘字段,我相信以下内容应该可以工作:

代码语言:javascript
复制
from django.db.models import Q
Thread.objects.filter(Q(board__parent_board__name='Computing') | Q(name='Computing'))

第一个Q对象选择属于电路板的线程,该电路板的'parent_board‘设置为名称为'Computing’的电路板。第二个Q对象选择线程,这些线程直接是名为“Computing”的板的一部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3045979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档