You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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参数:
    appellation = models.ManyToManyField(Appellation, related_name='rankings')
    
    这时Table中的accessor就可以改为accessor='rankings',代码可读性更强。

内容的提问来源于stack exchange,提问作者guil182

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:45:03