2012-12-22 92 views
0

我的工作我的第一個Python/Django應用程序,衝進以下問題:語法錯誤:關鍵字ARG後非關鍵字ARG

我的應用程序保持與Calendar模型類實現的預約日程表和CalendarDay模型類。在一個點上進行預約我要查詢的CalendarDay情況下,如:

dates = CalendarDay.objects.filter(calendar = booking.calendar, calendar_date >= booking.arrival_date, calendar_date <= booking.departure_date) 

這在第二和第三個參數產生'SyntaxError: non-keyword arg after keyword arg'。從Django的文檔中我明白你應該能夠做到這一點,並且條件是AND-ed,這就是我所追求的。

或者,當我嘗試:

dates = CalendarDay.objects.filter(calendar = booking.calendar, calendar_date__ge = booking.arrival_date, calendar_date__le = booking.departure_date) 

我從Django的一個FieldError: Join on field 'calendar_date' not permitted

我已經通過Django文檔工作,但是-apparently-我錯過了一些東西。我究竟做錯了什麼?

編輯:

我結束了以下解決方案:比

dates = CalendarDay.objects.filter(calendar = booking.calendar, calendar_date__range = [self.arrival_date, self.departure_date]) 
+2

哪裏Django文檔狀態,首先語法是有效的?因爲這對我來說似乎不太可能。如果兩個變量都是已知的,則語法'calendar_date> = booking.arrival_data'最終評估爲'True'或'False',因此您將一個布爾值傳遞給沒有關鍵字的函數。 – KillianDS

+0

@KillianDS:是的,你說得對。我重讀了這些文檔,但並沒有... – Roger

回答

4
dates = CalendarDay.objects.filter(calendar = booking.calendar, calendar_date__ge = booking.arrival_date, calendar_date__le = booking.departure_date) 

GE和文件是無效的,則使用LT(小於)或GT(更大)或gte(大於等於)和lte(小於等於)

(當你WIRTE樂 - Django的嘗試運行SQL參加現場所謂的「樂」,但心不是一個,因此你的錯誤)

1

對於您的第一次嘗試

dates = CalendarDay.objects.filter(calendar = booking.calendar, calendar_date >= booking.arrival_date, calendar_date <= booking.departure_date) 

calender_date >= booking.arrival_datecalender_date <= booking.departure_date評價爲TrueFalse。因此,第二個和第三個參數會出現'SyntaxError: non-keyword arg after keyword arg'錯誤。

對於第二次嘗試

dates = CalendarDay.objects.filter(calendar = booking.calendar, calendar_date__ge = booking.arrival_date, calendar_date__le = booking.departure_date) 

SQL聯接位於場「樂」和「GE」運行,但他們不there.Hence你FieldError: Join on field 'calendar_date' not permitted

您應該使用gtelte這是指大於或等於並小於或等於。

所以,你的代碼應該是

dates = CalendarDay.objects.filter(calendar = booking.calendar, calendar_date__gte = booking.arrival_date, calendar_date__lte = booking.departure_date) 
相關問題