2011-12-23 8 views
3

特定の夜に客室が利用可能かどうかをホステルが把握しているとします。さらに、1人以上のゲストのパーティーが部屋を探している場合、少なくともベッド数が多い部屋のみが必要になります。Djangoで利用可能な日付のフィルタリング

日付の範囲を指定すると、利用可能な客室があり、少なくともゲストのあるベッドの数と他のフィルタリングが必要です。

.filtersとのANDを効果的に連鎖させることなく、どうすればよいですか? (これは現在どのように動作しているのか、私のデータベースは非常に悲しいです)

私は確かに必要に応じて可用性データを格納するための別の体系にもオープンしています。

ありがとうございます! (以下の仮定のクラスは、問題のより良い感覚を与える。)

class Room(models.Model): 
    name = models.CharField(max_length=100) 

class RoomAvailability(models.Model): 
    room = models.ForeignKey(Rooms) 
    date = models.DateField() 
    beds = models.IntegerField(default=1) 
+0

その日に利用可能な部屋のリストを含む「デイ」モデルはありますか? –

+0

ええと...私のユースケースは、実際にはやや複雑です。私はサンプルコードをより明確に更新するつもりです。 (具体的には、利用可能なベッド数を数えなければならない...) – philipk

答えて

1
available_rooms = (Room.objects 
    .filter(roomavailability__date__range=(start_date, end_date)) 
    .values('roomavailability__date', 'pk') 
    .annotate(sum=Sum('roomavailability__beds')) 
    .filter(sum__gte=min_beds)) 

アップデート:私たちは一日あたりの空室状況が必要であることを忘れてしまいました。このクエリは、使用可能な日付の集合とその部屋PKを返します。

関連する問題