我有此代码:
class MyModel(models.Model):
input_field = model.CharField(max_length=100)
class MyModelForm(forms.ModelForm):
input_field = forms.CharField(disabled=True)
class Meta:
model = MyModel
我还读过docs:
当您像这样显式实例化表单字段时,了解
ModelForm
和常规Form
之间的关系非常重要。...
声明性定义的字段保持原样,因此将忽略对元属性(例如小部件,标签,help_texts或error_messages)进行的任何自定义;这些仅适用于自动生成的字段。
类似地,以声明方式定义的字段不会绘制其属性,例如max_length或相应模型所要求的属性。如果要维持模型中指定的行为,则在声明表单字段时必须显式设置相关参数。
是否可以通过允许我指定disabled=True
的方式将kwargs传递到“表单字段”,而又不会失去ModelForm
的内省和自定义的好处?必不可少,我可以吃蛋糕吗?
我知道我可以在widgets = {'input_field': widgets.TextInput(attrs={'readonly':'readonly'})
类中使用Meta
}来解决此问题,但是我对是否有更好的方法感兴趣
还不清楚是否如上所述修改widgets
属性是否会“继承” ModelForm否则将应用的默认配置,例如从基础模型推断max_length
。
答案 0 :(得分:0)
可能最简单的方法是覆盖__init__
。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['input_field'].disabled = True