1

予約システムに取り組んでいますが、空いている日付を選択する良い方法が見つかりません。これが私のモデルです:

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 にする必要があります)。

これはクエリで可能ですか?または、予約を反復処理して、予約済みの家をリストから削除する必要があります (予約が多い場合、これには多くの時間がかかる可能性があります)。

4

2 に答える 2

1

Rental_units ではなく Reservations が必要なので、それらをフィルタリングします。

Reservations.objects\
.filter(rental_unit__group__group_title='Bungalow')\
.exclude(
    Q(start_date__lt=arrival) & \
    Q(end_date__gt=arrival) | \
    Q(start_date__lt=departure) & \
    Q(end_date__gt=departure)
)
于 2013-05-26T07:30:34.323 に答える