2012-12-22 65 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) 
相关问题