0

私は最初の Python/Django アプリに取り組んでおり、次の問題に遭遇しました。

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'これは、2 番目と 3 番目の引数で生成されます。Djangoのドキュメントから、これを行うことができるはずであり、条件がANDされていることを理解しています。これが私が求めているものです。

または、試してみると:

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

FieldError: Join on field 'calendar_date' not permittedDjango から取得します。

私は Django のドキュメントを読み進めてきましたが、どうやら何かが足りないようです。私は何を間違っていますか?

編集:

私は次の解決策になりました:

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

2 に答える 2

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

ge と le は無効です。lt (より小さい) または gt (より大きい) を使用するか、gte (以上等しい) とlte (より小さくて等しい)を使用してください。

(ファイルを作成すると、Django は「le」というフィールドで sql join を実行しようとしますが、フィールドが存在しないため、エラーが発生します)

于 2012-12-22T10:29:15.897 に答える
1

あなたの最初の試みのために

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

calender_date >= booking.arrival_dateまたはにcalender_date <= booking.departure_date評価されます。したがって 、2 番目と 3 番目の引数でエラーが発生します。TrueFalse'SyntaxError: non-keyword arg after keyword arg'

2回目の試行

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

SQL 結合はフィールド「le」と「ge」で実行されますが、そこにはありません。FieldError: Join on field 'calendar_date' not permitted

以上または以下をそれぞれ参照するgteorを使用する必要があります。lte

だからあなたのコードは

dates = CalendarDay.objects.filter(calendar = booking.calendar, calendar_date__gte = booking.arrival_date, calendar_date__lte = booking.departure_date)
于 2012-12-22T10:50:59.753 に答える