2013-03-14 38 views
1

我想這一點:Django模型,適用於連接表濾波器()有額外的()

count = UserCheck.objects.filter(user=puser, fixture__competition__name__icontains='gold', 
            fixture__date__gte='2013-02-11', 
            fixture__date__lte='2013-05-24', year=2013).extra(
            where=["WEEKOFYEAR(fixture__date) = %s" %week]).exclude(result=0).count() 

的問題是extra()部分在那裏我可以不使用WEEKOFYEAR(fixture__date)過濾。我怎樣才能做到這一點。這可能嗎?

PS:我使用MySQL(和Django的1.4)

+0

你試過了嗎?[「WEEKOFYEAR(app_fixture.data =%s」%week「'? – dmg 2013-03-14 09:01:47

+0

right。Make it a answer so so can accept it!(只需使用'date'而不是'data'): - ) – xpanta 2013-03-14 09:29:00

回答

3

當使用extra QuerySet的修改,您不使用Django的ORM了。您正在使用「純」SQL,因此基本上相關的模型無法使用__表示法訪問,並且在您的情況下,fixture__date不是有效的列名稱。但是,我們必須記住,表在Django中以特定方式命名。所以,你可以使用:

count = UserCheck.objects.filter(user=puser, fixture__competition__name__icontains='gold', 
            fixture__date__gte='2013-02-11', 
            fixture__date__lte='2013-05-24', year=2013).extra(
            where=["WEEKOFYEAR(app_fixture.date) = %s" %week]).exclude(result=0).count() 

其中app是指持有Fixture模型的應用程序。

簡而言之,對於應用程序中的每個模型,Django生成表<app>_<model>,如果要引用該模型,則可以將其與extra子句一起使用。