2009-12-30 106 views
51

我試圖根據外鍵的特定字段的值過濾Django中的表。Django - 過濾外鍵屬性

比如我有兩個型號 -

# models.py 
class Asset(models.Model): 
name = models.TextField(max_length=150) 
project = models.ForeignKey('Project') 

class Project(models.Model): 
name = models.TextField(max_length=150) 

我想基於相關項目的名稱進行篩選,我的資產清單。

目前我執行兩個查詢:

# views.py 
project_list = Project.objects.filter(name__contains="Foo")   
asset_list = Asset.objects.filter(desc__contains=filter, project__in=project_list).order_by('desc') 

我不知道是否有在主查詢指定這種過濾的方法嗎?

回答

71

Asset.objects.filter(project__name__contains="Foo")

+1

謝謝, 我曾試過,但顯然我忘記了使用雙下劃線。 – 2009-12-30 18:13:31

+0

是否包含必要? – DeadDjangoDjoker 2015-07-11 07:08:46

9

queryset-refactor分支在1.0之前登陸以來,這已成爲可能。 Ticket 4088暴露了這個問題。這應該工作:

Asset.objects.filter(
    desc__contains=filter, 
    project__name__contains="Foo").order_by("desc") 

Django Many-to-one documentation有這個和其他使用模型API的外鍵的例子。

+0

難道這會打的DB兩次,我應該使用select_related(),使這個更優? – 2009-12-30 22:52:06

+4

您可以添加.query.as_sql()來查看將實際執行的sql。 – fastmultiplication 2010-07-17 05:19:32

+0

鏈接到Django文檔是完全過時的,並在'410頁刪除'土地: -/ – szeitlin 2015-10-09 17:14:51