Django模型表单下拉框显示分类名称而非对象标识的问题求助
解决Django表单下拉框显示模型对象标识而非名称的问题
这问题我碰到过好多次啦,核心原因是Django默认不知道怎么把你的Categories实例转换成友好的文本显示,解决起来非常简单,只需要给Categories模型添加一个__str__方法就行!
步骤1:修改Categories模型,添加__str__方法
在你的models.py中,给Categories类添加__str__方法,让它返回分类的name字段值:
class Categories(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=50) def __str__(self): return self.name # 返回分类名称作为实例的文本表示
这个方法会在所有需要显示模型实例字符串形式的场景中被调用——包括表单的下拉选项、Django Admin后台、甚至是你在shell中打印实例的时候,都会显示对应的name值(比如"weddings"),而不是默认的Categories object (1)。
步骤2:修正表单中的错误字段
另外注意到你EventForm的Meta类里写了fields = ['category','person','owner'],但你的Event模型并没有person字段,这会导致表单初始化报错,记得把这个错误修正:
class EventForm(forms.ModelForm): class Meta: model = Event fields = ['category','owner'] # 移除不存在的person字段
原理说明
Django渲染外键对应的表单字段(ModelChoiceField)时,会遍历所有可选的模型实例,调用每个实例的__str__方法来生成下拉框的显示文本。重写这个方法是官方推荐的、最简洁的控制模型实例显示文本的方式,不需要在表单中额外配置复杂的标签或逻辑。
内容的提问来源于stack exchange,提问作者Mike Vlad
相关产品推荐
相关产品推荐

