在www.example.com的Django日程安排应用程序中models.py我有一个User类和一个Appointment类。如何在html页面中显示用户表,其中包含用户数量以及患者总共有多少次预约的信息。表格如下:(患者数量/患者姓名/预约次数)和结果如下:(1/user1/3; 2/user2/5 ....)
models.py
class Pricelist(models.Model):
service=models.CharField('Name of service', max_length=60)
price=models.DecimalField(max_digits=6, decimal_places=2)
valid=models.BooleanField("Valid", default=False)
def __str__(self):
return f"{self.service} = {self.price} EUR"
class Patient(models.Model):
name=models.CharField('Name and Surname', max_length=60)
date_of_birth=models.CharField('Date of Birth', max_length=30, blank=True)
address=models.CharField("Address", max_length=300)
date_of_application=models.DateField(default=timezone.now)
is_active=models.BooleanField(default=False)
description = models.TextField(blank=True)
def __str__(self):
return self.name
class Appointment(models.Model):
id = models.AutoField(primary_key=True)
user=models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, limit_choices_to={'active': True},)
appointment=models.ForeignKey(Pricelist, on_delete=models.CASCADE, null=True, blank=True)
day=models.DateField(default=date)
time_service = models.CharField(max_length=10, choices=TIME-CHOICE, default="16:00")
is_paid = models.BooleanField(default=False)
def __str__(self):
return f"{self.user.name} | dan:{self.day} | time:{self.time_service} | service:{self.service.price}"
class Meta:
db_table = "tblappointment"
我在www.example.com中通过ID获取每个患者的信息view.py:
def patient_statistics(request, patient_id):
patient = Patients.objects.get(pk=patient_id)
appointments = patient.appointment_set.all()
appointment_count = patient.appointment_set.all().count()
total_price = terms.aggregate(sum=Sum('treatment__price'))['sum']
return render(request, 'patients/patient_statistics.html', {"appointment_count":appointment_count, "patient":patient, 'terms':terms, 'total_price':total_price})
但我不知道如何做一个病人和治疗次数的汇总表。我在寻求帮助。
1条答案
按热度按时间vddsk6oq1#
您可以使用以下命令**
.annotate(…)
**[Django-doc]:从这个
QuerySet
产生的Patient
对象将有一个额外的属性.appointments
,所以在你看来,你用途:你可以这样做: