予約システムに取り組んでいますが、空いている日付を選択する良い方法が見つかりません。これが私のモデルです:
class rental_group(models.Model):
group_title = models.CharField(max_length = 30)
description = models.TextField()
class rental_units(models.Model):
group = models.ForeignKey(rental_group)
number = models.CharField(max_length = 6)
class Reservations(models.Model):
#name = models.ForeignKey(customer)
rental_unit = models.ForeignKey(rental_units)
start_date = models.DateField()
end_date = models.DateField()
このクエリで利用可能な部屋を選択しようとしました:
rental_units.objects.filter(group__rental_group = 'Bungalow').exclude(Q(Reservations__start_date__lt = arrival)&Q(Reservations__end_date__gt = arrival)|Q(Reservations__start_date__lt = departure)&Q(Reservations__end_date__gt = departure))
これは、予約が 1 つしかない場合に最適です。同じ番号でより多くの予約がある場合、問題が発生します。たとえば、番号 120 に 2 つの予約がある場合、このクエリは、すべてが利用可能な場合に 120 を 2 回返します。新しい予約が古い予約日のいずれかの間にある場合は、120 が 1 回返されます (「利用できない」場合は 0 にする必要があります)。
これはクエリで可能ですか?または、予約を反復処理して、予約済みの家をリストから削除する必要があります (予約が多い場合、これには多くの時間がかかる可能性があります)。