如何在Django模板中显示关联Dependency模型的prc_select_obj字段信息?
解决方法
1. 优化查询性能(避免N+1查询问题)
先修改你的CondRecListView查询集,预取关联的Dependency对象,避免模板渲染时反复发起数据库查询:
class CondRecListView(ListView): context_object_name = 'obj_context' model = CondRecordHdr template_name = ... def get_queryset(self): # 预取关联的Dependency数据,提升页面渲染效率 return CondRecordHdr.objects.prefetch_related('dependency_set').order_by(...)
2. 模板中渲染关联数据
根据你的业务场景(一个CondRecordHdr对应一个或多个Dependency),选择对应的模板写法:
场景1:一个CondRecordHdr对应多个Dependency
如果要把所有关联的prc_select_obj用逗号分隔显示:
<td> {% for dep in obj.dependency_set.all %} {{ dep.prc_select_obj }}{% if not forloop.last %}, {% endif %} {% empty %} - {% endfor %} </td>
场景2:一个CondRecordHdr对应一个Dependency
直接取第一个关联对象的字段值,无关联数据时显示-:
<td>{{ obj.dependency_set.first.prc_select_obj|default:"-" }}</td>
可选:给反向关联起友好名称
如果觉得dependency_set这个默认名称不够直观,可以修改Dependency模型的外键字段,添加related_name自定义反向关联名称:
class Dependency(models.Model): cond_dependency = models.AutoField(primary_key=True, ...) # 自定义反向关联名称,提升代码可读性 prc_cond_hdr = models.ForeignKey(CondRecordHdr, related_name='dependencies', ...) prc_select_obj = models.CharField(max_length=15, ...)
修改后,模板里就可以用obj.dependencies.all代替obj.dependency_set.all。
内容的提问来源于stack exchange,提问作者wsrt
相关产品推荐
相关产品推荐

