姜戈:被多多关系弄糊涂了



我一直在试图弄清楚pre_fetch和多对多关系的运作方式。这让我感到困惑。我不明白。

我有这些模型:

class Clinic(models.Model):
     name = models.CharField(max_length=100)
     address = models.CharField(max_length=200)

class Doctor(models.Model):
     name = models.CharField(max_length=100)
     clinics = models.ManyToManyField(Clinic, through='ClinicDoctor', related_name='doctors')
     patients = models.ManyToManyField('Patient', through='DoctorPatientAppointment', related_name='doctors_appointment')
class ClinicDoctor(models.Model):
     doctor = models.ForeignKey(Doctor, related_name='doctorsF')
     clinic = models.ForeignKey(Clinic, related_name='clinicsF')

class Patient(models.Model):
     name = models.CharField(max_length=100)
     mobile = models.CharField(max_length=20)
class DoctorPatientAppointment(models.Model):
     patient = models.ForeignKey(Patient, related_name='patient_appointments')
     doctor = models.ForeignKey(Doctor, related_name='doctor_appointments') 
     clinic = models.ForeignKey(Clinic, related_name='clinic_appointments') 

我浏览了文档和许多SO问题/答案。另外,搜索了谷歌。但我认为我不明白我应该怎么做。

这就是我想要实现的目标。

我想找到拥有给定手机号码的患者,然后我想了解他们与哪些医生和诊所预约。

我尝试了许多在SO上找到的解决方案。它不起作用。

Doc = Doctor.objects.all().prefetch_related('patients','clinics')
for doc in Doc:
   docString = .....
   for pat in doc.patients.filter(mobile=12345):
       patientString = .....
       for cli in doc.clinics.all():
            clinicString = .....

我觉得这是不对的。我也尝试了其他几种方法。我什至不记得我整天从互联网上尝试了什么。我只知道什么都不起作用,现在我迷路了。

在SQL中,使用JOIN很简单,但我是Django及其查询系统的新手。

可以请某人建议如何做到这一点以及改进我的模型的任何方法。

谢谢

尝试这样的事情:

dpa_QS = DoctorPatientAppointment.objects.filter(patient__mobile=12345)
for dpa in dpa_QS:
    print(dpa.doctor)
    print(dpa.clinic)

它可能需要优化,但它会起作用。

相关内容

  • 没有找到相关文章

最新更新