私はDjango 1.6を使用しており、次のモデルがあります(読みやすくするために少し簡略化されています):
class Person(models.Model):
name = models.CharField(max_length=128)
class Room(models.Model):
max_persons = models.SmallIntegerField()
name = models.CharField(max_length=30, unique=True)
class Stay(models.Model):
person = models.ForeignKey(Person)
STAY_TYPE = (
(1, 'Type 1'),
(2, 'Type 2'),
(3, 'Type 3'),
)
stay_type = models.CharField(max_length=1, choices=STAY_TYPE)
class Hospitalization(models.Model):
stay = models.ForeignKey(Stay)
date_in = models.DateField()
date_out = models.DateField(blank=True, null=True)
room = models.ForeignKey(Room)
(queryset
マネージャーで) を使用して、特定の日付に利用可能なすべての部屋を取得したいと思います。つまり、max_persons
満たされていない場所です。
これまでのところ、Q
いろいろいじってみましたが、比較Room.objects.filter(hospitalization__date_out__lt="2014-04-25")
がわかりません。max_persons
アイデアはありますか?
編集
各部屋に関連する Person オブジェクトの数は、その部屋の人数を表しています。
したがって、以下のカールの提案に従って、私は遊んでみました:
Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=hospitalization_set__stay__person.Count()).exclude(num_persons__lte=max_persons)
- 収量
NameError: name 'hospitalization_set__stay__person' is not defined
- 収量
Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=Count('hospitalization_set__stay__person')).exclude(num_persons__lte=max_persons)
- 収量
FieldError: Cannot resolve keyword 'hospitalization_set' into field.
- 収量
Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=Count('hospitalization__stay__person')).exclude(num_persons__lte=F('max_persons'))
[]
現在の DB によると、少なくとも 3 つの結果が期待されますが、何も得られません ( )。- を削除
.exclude()
しても、まだ結果が得られません。.annotate()
私が使っているのは何か間違っているようです。