Django Tables2实现反向多对多:在Appellation表展示关联Ranking
解决方案
在Appellation对应的Table类中,通过Django自动生成的反向关联关系,使用ManyToManyColumn即可实现显示该Appellation关联的所有Ranking,代码示例如下:
from django.utils.html import format_html import django_tables2 as tables from .models import Appellation class AppellationTable(tables.Table): # 新增展示关联Ranking的列 rankings = tables.ManyToManyColumn( accessor='ranking_set', # 对应Appellation的反向关联集合 transform=lambda obj: format_html('<span class="badge py-3 px-4 fs-7 badge-light-primary">{}</span>', str(obj)), separator=' ' ) class Meta: model = Appellation fields = ('name', 'region', 'rankings') # 根据实际需求调整要显示的字段
关键说明
accessor='ranking_set':因为Ranking模型里的ManyToManyField名为appellation,Django会自动为Appellation模型生成名为ranking_set的反向关联属性,用于获取当前Appellation关联的所有Ranking对象。transform参数:和你之前处理Ranking列的逻辑完全一致,用format_html渲染带样式的徽章,保证显示风格统一。- 如果想让反向关联名称更直观,可以修改
Ranking模型的ManyToManyField,添加related_name参数:
这时Table中的appellation = models.ManyToManyField(Appellation, related_name='rankings')accessor就可以改为accessor='rankings',代码可读性更强。
内容的提问来源于stack exchange,提问作者guil182
相关产品推荐
相关产品推荐

