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

Django含外键表UI新增数据及外键显示优化问题

解决方案

1. 修复下拉选项显示问题

问题根源是Scheme模型未定义__str__方法,Django默认会把模型对象显示为scheme object(1)这类默认字符串。修改Scheme模型,添加__str__方法返回scheme_code:

class Scheme(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)  
    scheme_code = models.CharField(db_column='Scheme_Code', max_length=10, blank=True, null=True)

    def __str__(self):
        # 兼容scheme_code为空的情况,避免返回空字符串
        return self.scheme_code or f"未编码方案 {self.id}"

2. 正确渲染外键字段

在HTML模板中直接使用{{ form.scheme }}渲染外键字段即可,此时下拉选项会显示scheme_code的值,而非对象字符串:

<div class="form-group row">
    <label class="col-sm-2 col-form-label">Scheme Code:</label>
    <div class="col-sm-4">
        {{ form.scheme }}
    </div>
</div>

原写法无效的原因

  • {{ form.scheme.scheme_code }}显示空白:form.scheme是Django表单的ModelChoiceField实例,并非Scheme模型对象,因此没有scheme_code属性。只有在编辑已有SchemeMovement记录时,form.instance.scheme才是关联的Scheme对象,此时{{ form.instance.scheme.scheme_code }}能显示对应值,但新增场景下该值为空。
  • {{ form.scheme }}显示对象字符串:未定义__str__方法时,Django默认输出模型对象的类名+ID,添加__str__方法后会替换为自定义的显示内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:57:54