我的模特:
class Ward(models.Model):
id = models.AutoField(primary_key=True, unique=True)
clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE)
name = models.CharField(max_length=500, default='', blank=True)
description = models.CharField(max_length=2000, default='', blank=True)
bedcapacity = models.IntegerField(default=1)
class Bed(models.Model):
id = models.AutoField(primary_key=True, unique=True)
name = models.CharField(max_length=200, default='',
blank=True, unique=True)
clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE)
ward = models.ForeignKey(Ward, on_delete=models.CASCADE)
occupied = models.BooleanField(default=False)
我正在写将以下伪代码转换为django:
from django.db.models import F, Q, When
clinic = Clinic.objects.get(pk=10)
wards = Ward.objects.filter(clinic=clinic)
ward_set = []
for ward in wards:
occupied = len(Bed.objects.filter(clinic = clinic, ward = ward, occupied = True))
total = len(Bed.objects.filter(clinic = clinic, ward = ward))
ward['occupied'] = occupied # The next two lines are pseudocode
ward['total']=total
ward_set.append(ward)
return render(request, 'file.html',
{
'wards': ward_set
})
我相信我应该使用注释,但是我发现很难从文档中理解注释。
答案 0 :(得分:2)
那呢?
from django.db.models import Q, Count
ward_set = Ward.objects.filter(clinic=10).annotate(
occupied=Count('bed', filter=Q(bed__occupied=True)),
total=Count('bed')
)
的一些示例