如何在Django tables中将子模型字段合并展示到表格单元格中
不需要额外在数据库中自定义字段,直接通过django-tables的自定义列渲染功能就可以实现该需求。
具体实现方法如下:
- 调整你的table类定义,重写name列的渲染逻辑,在渲染时判断当前记录的实际子类类型,拼接对应字段的展示值即可,代码示例:
import django_tables2 as tables from .models import Product, CPU, Motheboard class ProductTable(tables.Table): def render_name(self, value, record): extra_content = "" # 匹配CPU子类时拼接插槽信息 if isinstance(record, CPU) and record.sockets: # get_sockets_display()会自动读取choices配置的展示文本 extra_content = f" {record.get_sockets_display()}" # 匹配主板子类时拼接板型信息 elif isinstance(record, Motheboard) and record.form_factor: extra_content = f" {record.get_form_factor_display()}" return f"{value}{extra_content}" class Meta: model = Product fields = ("name", "cost")
- 因为你的
Product是抽象基类,无法直接查询,需要同时展示CPU和主板两类数据时,可以合并两个子类的查询集后传给表格实例:
from itertools import chain from .models import CPU, Motheboard # 合并两个子类的查询结果 product_data = list(chain(CPU.objects.all(), Motheboard.objects.all())) # 传入表格即可生成符合你要求的展示效果 table = ProductTable(product_data)
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

