Django ListView外键显示pk而非__str__值及通用表格渲染问题问询
通用模型表格渲染方案(问题1解答)
你当前的Mixin复用逻辑已经是轻量场景下非常符合DRY原则的实现。如果需要更完整的能力(比如内置排序、分页、过滤、Bootstrap样式自动适配),可以选择引入django-tables2库,它支持基于模型自动生成表格结构,无需硬编码字段名,关系字段默认就会调用关联对象的__str__方法输出,只需要少量配置即可适配多模型复用的需求。如果不想引入额外依赖,你现有方案只需要修改Mixin的对应方法即可满足需求。
外键字段显示修复方案(问题2解答)
你遇到的外键输出PK的问题,根源是Django的field.value_to_string()方法对关系字段的默认逻辑就是返回主键值,只需要修改TemplateHelperClass的get_fields方法,增加关系字段的特殊处理即可,全程不需要硬编码具体字段名,也不需要修改模板和业务模型代码:
class TemplateHelperClass(): paginate_by = 15 def get_fields(self): result = [] for field in self._meta.fields: # 处理关系字段,返回关联对象的字符串表示 if field.is_relation: related_obj = getattr(self, field.name) value = str(related_obj) if related_obj is not None else "" else: # 普通字段沿用原有逻辑 value = field.value_to_string(self) result.append((field, value)) return result
修改后所有继承该Mixin的模型的关系字段都会自动输出关联对象的__str__返回值,空关联会返回空字符串避免报错,现有模板可以直接复用。
内容的提问来源于stack exchange,提问作者Tahnoon Pasha
相关产品推荐
相关产品推荐

