尝试通过m2m字段呈现与另一个对象链接的对象的属性。
#models
class Arm(models.Model):
cmrs = models.ManyToManyField(CMR, null=True)
class CMR(models.Model):
client = models.ForeignKey('Client', on_delete=models.CASCADE,
null=True, default="", blank=True)
视图
if us.groups.filter(name__in = ['prime']):
query_set = Plan.objects.order_by('-pk')
query_ys = Arm.objects.filter(date=ys)
query_rn = Arm.objects.filter(date=rn)
query_tm = Arm.objects.filter(date=tm)
client_rn = query_rn.prefetch_related('cmrs')
args = {'query_rn': query_rn,
'cl_rn': client_rn,
'query_tm': query_tm,
'query_ys': query_ys,
'query_set': query_set
}
return render(request, 'personnel/schedule/test-schedule-full.html', args)
和模板
<tbody id="add">
{% for query in query_rn %}
<tr class="row100 body {{ query.status }}" data-href="/personnel/arm/{{ query.id }}">
<td class="cell100 column1">{{ query.driver }}</td>
<td class="cell100 column2">{% for idem in cl_rn.cmrs.all %} {{ idem.client }} {% endfor %}</td>
<td class="cell100 column3">{{ query.des_from}}</td>
<td class="cell100 columnarrow"><i class="fas fa-arrow-circle-right"></i></td>
<td class="cell100 column4">{{ query.des_to }}</td>
</tr>
{% endfor %}
</tbody>
我要做的是显示与client
中CMR
关联的Arm
个对象的<td class="cell100 column2"></td>
字段的所有值,但它没有显示任何内容代替。
答案 0 :(得分:0)
为prefetch_related调用提供单独的查询集是没有意义的。你正在迭代query_rn
,你需要在同一个查询集上定义prefetch_related,然后从那里迭代相关的对象;你根本不需要client_rn
。所以:
query_rn = Arm.objects.filter(date=rn).prefetch_related('cmrs')
...
{% for query in query_rn %}
{% for idem in query.cmrs.all %} {{ idem.client }} {% endfor %}
{% endfor %}
另请注意,代码的第一行有点偏。您不应该将__in
与单列表元素一起使用,只需检查是否相等;并且由于您只想检查相关组是否存在,您应该使用exists()
方法,这种方法效率稍高:
if us.groups.filter(name='prime').exists():