更新
我把我的疑问改为:
ClinicDoctorDayShift.objects.filter(clinic_doctor__doctor_id = doctor_id)
有了这个我就能得到所有的值。但正如您所见,我现在没有使用prefectch
。如果我要找很多医生,比如按姓名叫医生,这是不是效率低下?在
模板现在有:
^{pr2}$原版
第一个网站。第一次用Django。 我现在正在视图中使用此查询:
visitingQuerySet = ClinicDoctor.objects.filter(doctor_id = doctor_id).prefetch_related('clinicDoctor_dayShift').all()
然后在模板中我想要这样的内容:
{% for vis in visitinghours %}
<tr>
<td>
{{ vis.doctor.full_name }}
</td>
<td>
{{ vis.clinic.name }}
</td>
<td>
{{ vis.clinicdoctordayshift.id }}
</td>
</tr>
I can get first two `<td>` but not others if I try to get values from other models.
我的模型是:
class User(AbstractUser):
full_name = models.CharField(max_length=200)
clinics = models.ManyToManyField(Clinic, through='ClinicDoctor', related_name='doctors')
class ClinicDoctor(models.Model):
doctor = models.ForeignKey('User', related_name='doctorsF')
clinic = models.ForeignKey(Clinic, related_name='clinicsF')
class Day(models.Model):
day = models.CharField(max_length=20)
class Shift(models.Model):
shift = models.CharField(max_length=20)
days = models.ManyToManyField(Day, through='DayShift', related_name='day_shift')
class DayShift(models.Model):
time = models.TimeField()
day = models.ForeignKey(Day, related_name='to_day')
shift = models.ForeignKey(Shift, related_name='to_shift')
clinics_doctors = models.ManyToManyField(ClinicDoctor, through='ClinicDoctorDayShift', related_name='clinicDoctor_dayShift')
class ClinicDoctorDayShift(models.Model):
clinic_doctor = models.ForeignKey(ClinicDoctor, related_name='to_clinicDoctor')
day_shift = models.ForeignKey(DayShift, related_name='to_dayShift')
我希望能够同时得到Day.day
、Shift.shift
和{
我的prefetch_related
错了吗?
在那之后,是否可以查看这个prefetch_related
:
if visitingQuerySet:
我的意思是这会导致任何额外的DB
点击,还是这将是第一个被实际评估的点?在
目前,我可以看到这两个查询正在为该部件执行:
SELECT
health_clinicdoctor.id,
health_clinicdoctor.doctor_id,
health_clinicdoctor.clinic_id,
health_clinicdoctor.is_active
FROM health_clinicdoctor
WHERE health_clinicdoctor.doctor_id = 14
SELECT
(health_clinicdoctordayshift.clinic_doctor_id) AS _prefetch_related_val_clinic_doctor_id,
health_dayshift.id,
health_dayshift.time,
health_dayshift.day_id,
health_dayshift.shift_id
FROM health_dayshift
INNER JOIN health_clinicdoctordayshift
ON ( health_dayshift.id = health_clinicdoctordayshift.day_shift_id )
WHERE health_clinicdoctordayshift.clinic_doctor_id IN (1, 2, 3)
请帮忙。在
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐