Django中ModelChoiceField显示对象而非内容,如何修改代码?
解决ModelChoiceField显示内容而非对象实例的方法
有两种简单方式可以实现需求:
方法一:修改模型的__str__方法
在AnalysisVariableUnit模型中添加__str__方法,直接返回contents字段的值。Django的ModelChoiceField会自动调用对象的__str__方法生成下拉选项的显示文本,这个修改是全局生效的。
# models.py class AnalysisVariableUnit(models.Model): contents = models.CharField(max_length=255) # 按实际字段定义调整 # 其他字段... def __str__(self): return self.contents
方法二:在表单字段中自定义显示逻辑
如果不想修改模型,可以直接在ModelChoiceField里通过label_from_instance属性指定显示内容,这个修改仅对当前表单生效。
修改forms.py中的units字段:
units = forms.ModelChoiceField( required=False, widget=forms.Select, queryset=unit_set, label_from_instance=lambda obj: obj.contents )
两种方法都能让下拉框显示indeksipisteluku和%这两个值,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者Jaana
相关产品推荐
相关产品推荐

