Django:无法访问temp中与预取相关的值

2024-10-01 00:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

更新

我把我的疑问改为:

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.dayShift.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)

请帮忙。在

谢谢


Tags: nameidshiftmodelsclasstdrelatedhealth