我尝试显示只读信息,并希望将ForeignKey字段显示为简单字符串,以显示模型的当前状态。
我知道如何将选择限制在我所需要的范围之内。但是,仍然可以在该选项和“无”(-----)之间进行选择。
我也不想要<select>
字段,我只想要<input>
字段
目前,我通过在ModelForm类中定义额外的字段并手动将HTML中的所有内容手动添加到一起解决了该问题;如下所示。好吧,那太可怕了。
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
for field in self.fields:
self.fields[field].required = False
self.fields[field].widget.attrs['readonly'] = True
self.fields['colour'] = {
'value': self.instance.batch_colour,
}
self.fields['type'] = {
'value': self.instance.shellfish_type,
}
self.fields['supplier'] = {
'value': self.instance.supplier,
}
class Meta:
model = Batch
fields = '__all__'
如果我使用小部件并定义CharField(),我只会得到它们的ID
class Meta:
model = Batch
fields = '__all__'
widgets = {
'colour': forms.CharField(),
'type': forms.CharField(),
'supplier': forms.CharField(),
'comment': forms.Textarea(
attrs={
'rows': 3,
'readonly': True,
}
),
}
我还尝试使用所示的def __init__(self, *args, **kwargs):
设置覆盖class Meta
中的值,但没有成功。我仍然只获得当前状态的个人ID。
self.fields['type'].widget.attrs['value'] = self.instance.type.name,