Django:对多对多关系感到困惑
Django: confused by manytomany relationship
我一直在尝试弄清楚 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 quetions/answers。另外,搜索 Google。但我想我不明白我应该怎么做。
这是我想要实现的。
我想找到具有给定手机号码的患者,然后我想知道他们预约了哪些医生和诊所。
我尝试了很多在 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)
它可能需要优化,但它会起作用。
我一直在尝试弄清楚 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 quetions/answers。另外,搜索 Google。但我想我不明白我应该怎么做。
这是我想要实现的。
我想找到具有给定手机号码的患者,然后我想知道他们预约了哪些医生和诊所。
我尝试了很多在 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)
它可能需要优化,但它会起作用。