有这个禁用的属性。但我无法将其应用于模型表字段。我不知道该怎么做。我可以轻松地将它添加到forms.Form。但由于我使用小部件,我只是不知道在哪里插入它。
https://docs.djangoproject.com/en/2.0/ref/forms/fields/#disabled
class TestForm(forms.ModelForm):
class Meta:
model = Test
fields = ['date']
widgets = {'date': forms.TextInput(attrs={'readonly': 'readonly'})}
答案 0 :(得分:1)
class TestForm(forms.ModelForm):
date = forms.CharField(disabled=True)
class Meta:
model = Test
fields = ['date']
widgets = {
'date': forms.TextInput(attrs={'readonly': 'readonly'}),
}
答案 1 :(得分:1)
尝试类似这样的事情,假设您的date
字段为forms.DateField
并且您要使用TextInput
小部件:
class TestForm(forms.ModelForm):
date = forms.DateField(widget=forms.TextInput, disabled=True)
class Meta:
model = Test
fields = ['date']
这将覆盖从Test
模型定义创建的默认字段定义。
禁用的boolean参数设置为True时,使用禁用的HTML属性禁用表单字段,以便用户无法编辑它。即使用户篡改了提交给服务器的字段值,也会忽略该格式以支持表单初始数据中的值。
了解readonly vs disabled HTML输入属性。
从上述SO帖子中取出的关键注释是:
readonly
元素不可编辑,但会在相应的form
提交时发送。disabled
元素无法编辑,也不会在提交时发送。
从上面引用,设置disabled=True
就足够了,因此您无需在窗口小部件上设置readonly
属性。
答案 2 :(得分:1)
在创建时我想禁用某些字段时遇到了一种情况。并且某些字段在编辑时被禁用。
我的环境: Python 3,Django 2.1
我的表单:
class AddInvoiceForm(forms.ModelForm):
disabled_fields = ['inv_type', 'report', 'subsidiary']
class Meta:
model = models.Invoice
fields = ('inv_type', 'report', 'subsidiary', 'rate_card', 'reviewed')
def __init__(self, *args, **kwargs):
super(AddInvoiceForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
for field in self.disabled_fields:
self.fields[field].disabled = True
else:
self.fields['reviewed'].disabled = True