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
相关产品推荐
相关产品推荐

