2013-12-12 72 views
0

Django的關係語法比較

class Foo(models.Model): 
    bar = models.ForeignKey(Bar) 

class Bar(models.Model): 
    date = models.DateTimeField(auto_add_now=True) 

是這些不同?:

Foo.bar.filter(date=...) 
Foo.objects.filter(bar__date=...) 

如果是這樣,怎麼樣?如果不是,他們爲什麼都存在?

+1

由於第一個不是在Django的有效查詢,並會返回一個錯誤,那麼是的,有一個不同 – yuvi

+0

我從一些預先存在的代碼,但我只是意識到'foo.bar.filter'來自遍歷關係。我簡化了它太多。 –

+0

所以呃......問題回答了? – yuvi

回答

1

由於@yuvi提及Foo.bar.filter(date=...)無效。也許第一個查詢會是這樣:

Foo.bar.get_query_set().filter(date=...) 

Foo.bar.get_query_set()會爲bar查詢集是一樣的Bar.objects.all()。因此這兩者完全不同。

Foo.bar.filter不存在,因爲Foo.bar存在以獲得關於該字段的描述。

+0

我爲無效查詢表示歉意,我試圖從我正在閱讀的預先存在的代碼中複製該代碼,並且做得不正確。我的主要問題是,我看到沿着Foo.bar ...和foo.objects.filter(bar __...)行的東西,我想知道是否在語法上有所不同 –