如何过滤Django子外键字段?

时间:2016-12-09 03:59:20

标签: python django django-models django-queryset

所以我有以下模特:

SuggestedArticle:

linked_article = models.ForeignKey('Article', blank=True, null=True, db_constraint=False)
... more fields which aren't relevant to this question ...

文章:

title=models.CharField(max_length=60)
draft_state=models.BooleanField(default=True)
... More fields which aren't relevant to this questions ...

在文章模型中有一个字段draft_state,它允许我将文章的状态更改为已发布,草稿,已阻止(1,2,3)。

我正在提取所有推荐的文章,并希望过滤外键文章以确保draft_state === 1。以下是我目前所拥有的一些伪代码,我认为实现此代码的代码可能如下所示:

 suggested_article = SuggestedArticle.objects\
       .filter(
           is_active=1,
           Article.draft_state=1, # Something like this?! <~~~~~
           state__in=[state, 'ALL'],
        )\

我能用django做到这一点吗?

1 个答案:

答案 0 :(得分:1)

  

Django提供了一种强大而直观的方式来“关注”lookups中的关系,在幕后自动为您处理 SQL JOINs 。要跨越关系,只需使用跨模型的相关字段的字段名称,用双下划线分隔,直到到达所需的字段:

suggested_article = SuggestedArticle.objects.filter(
  is_active=1,
  state__in=[state, 'ALL'],
  linked_article__draft_state=True
)