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

Django多对多关系下如何正确显示Status模型的状态值

Django多对多关系(Workflow与Status)模板显示状态文本方案

问题原因

{{ workflow.status.all }} 输出的是QuerySet对象,而非实际状态文本,因为多对多关联返回的是Status模型实例的集合,需显式取出实例中的状态字段值。

解决方法

方法一:模板内循环遍历QuerySet

直接在模板中遍历workflow.status.all,取出每个Status实例的状态文本字段(假设Status模型中存储状态文本的字段为name):

模型示例

# models.py
from django.db import models

class Status(models.Model):
    name = models.CharField(max_length=50)  # 存储OPEN、IN PROGRESS等状态文本

class Workflow(models.Model):
    status = models.ManyToManyField(Status)

模板代码

<!-- 模板文件 -->
{% for status in workflow.status.all %}
    {{ status.name }}
    {% if not forloop.last %}, {% endif %}  <!-- 可选:多个状态用逗号分隔,优化显示 -->
{% endfor %}

方法二:在模型中定义属性方法(推荐)

在Workflow模型中添加一个属性方法,提前拼接好所有状态文本,模板中直接调用即可,代码更简洁:

模型修改

# models.py
from django.db import models

class Status(models.Model):
    name = models.CharField(max_length=50)

class Workflow(models.Model):
    status = models.ManyToManyField(Status)
    
    @property
    def status_texts(self):
        # 拼接所有状态文本,用逗号分隔
        return ", ".join([status.name for status in self.status.all()])

模板代码

{{ workflow.status_texts }}

注意事项

  • 请根据实际模型调整字段名:如果你的Status模型中存储状态文本的字段不是name,比如是status_value,请将代码中的status.name替换为status.status_value。
  • 如果需要自定义状态的显示格式(比如换行、添加样式),可以在模板循环中添加HTML标签调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:18:38