如果问题标题不正确,请道歉。如果这里的细节让您了解我的要求,请有人纠正。我不是说英语的人,所以在写标题时可能会犯错误。
我有这个型号:
class ClinicDoctor(models.Model):
doctor = models.ForeignKey('User', related_name='doctorsF') # single quotes (') because User table is defined down the code.
clinic = models.ForeignKey(Clinic, related_name='clinicsF')
我正在尝试取出所有医生记录和他们的诊所。有些医生可能有多个诊所。在我的模板中,我循环遍历以下查询集:
doctorsQuerySet = ClinicDoctor.objects.filter(doctor__groups__name='Doctor')
这会返回记录,但我想在这样的表中显示记录:
DoctorHeader ------------- ClinicsHeader
医生1 ----------------诊所1,诊所2.
医生2 ----------------诊所3
医生3 ----------------诊所4,诊所5,诊所7
我的想法是,我只想向每位医生展示一次,然后将他所有相关的诊所放在该医生的那一行。
现在我正在循环模板中的查询集,但是会多次显示相同的医生记录(与相关诊所一样多)。
有没有什么方法可以修改上面的查询以实现分组,或者我将不得不在模板中处理它以查看Doctor_id何时从之前的循环运行中更改并连接诊所然后将它们放入{{ 1}}标签?
我试图搜索SO,但没有找到相关问题。可能是我的措辞,而搜索与我正在寻找的不一样。如果它已经解决了某人,那么道歉。您可以分享链接。
谢谢。
答案 0 :(得分:1)
如果您只需要模板中的数据,则可以使用以下内容(请注意,下面的代码实际上没有经过测试,但希望能让您朝着正确的方向前进):
views.py
...
# Pass whatever model is the foreign key for "doctor" in the ClinicDoctor model
context = {"doctors": User.objects.all()}
...
template.html
<table>
<thead>
<tr>
<th>Doctor Header</th>
<th>Clinics Header</th>
</tr>
</thead>
<tbody>
{% for doctor in doctors %}
<tr>
<td>{{ doctor }}</td>
<td>
{% for clinicdoctor in doctor.clinicdoctor_set.all %}
clinicdoctor.clinic{% if not forloop.last %}, {% endif %}
{% endfor %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
首先将您的医生查询集传递给模板,然后循环遍历它们。 clinicdoctor_set.all
将检索该医生的所有ClinicDoctor条目(_set.all
允许您反向检索外键关系中的所有条目)。然后,您可以正常引用相关的诊所外键。
{% if not forloop.last %}, {% endif %}
将在每个诊所条目之间添加逗号,但循环的最后一个除外。
您可以在Related objects reference和Template reference下了解更多信息。