Django 表单中的只读字段
Read-Only Field in Django Form
如何在 Django 表单中将字段设置为只读?我知道如何禁用一个字段,但这不是我要找的。任何帮助,将不胜感激。
您可以在定义 Field
时使用可选的 attrs
参数。即:
somefield = forms.CharField(
widget=forms.TextInput(attrs={'readonly':'readonly'})
)
在 django 1.9 中 Field.disabled 属性可用:https://docs.djangoproject.com/en/1.9/ref/forms/fields/#disabled
disabled 布尔参数,当设置为 True 时,使用 disabled HTML 属性禁用表单字段,这样用户就不能编辑它。即使用户篡改了提交给服务器的字段值,它也会被忽略,取而代之的是表单初始数据中的值。
否则
使用小部件 'readonly' 属性
class PatientForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PatientForm, self).__init__(*args, **kwargs)
self.fields['field'].widget.attrs['readonly'] = True
class Meta:
model = Patient
在Django 1.9+
中:
somefield = forms.CharField(disabled=True)
这是我让它在 Js 中工作的唯一方法:
function myFieldOnChange() {
var myField= document.getElementById("myFieldID")
myField.setAttribute('readonly', true)
如果您在多个视图中使用表单,也许在前端完成此操作的最佳方法之一是 widget-tweak。
如果您不想安装额外的库,您可以简单地手动添加字段并使用 django 输入属性。
像这样:
<input
name="{{ form.fieldname.name }}"
type="{{ form.fieldname.widget.input_type }}"
readonly="readonly"
>
</input>
如何在 Django 表单中将字段设置为只读?我知道如何禁用一个字段,但这不是我要找的。任何帮助,将不胜感激。
您可以在定义 Field
时使用可选的 attrs
参数。即:
somefield = forms.CharField(
widget=forms.TextInput(attrs={'readonly':'readonly'})
)
在 django 1.9 中 Field.disabled 属性可用:https://docs.djangoproject.com/en/1.9/ref/forms/fields/#disabled
disabled 布尔参数,当设置为 True 时,使用 disabled HTML 属性禁用表单字段,这样用户就不能编辑它。即使用户篡改了提交给服务器的字段值,它也会被忽略,取而代之的是表单初始数据中的值。
否则
使用小部件 'readonly' 属性
class PatientForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PatientForm, self).__init__(*args, **kwargs)
self.fields['field'].widget.attrs['readonly'] = True
class Meta:
model = Patient
在Django 1.9+
中:
somefield = forms.CharField(disabled=True)
这是我让它在 Js 中工作的唯一方法:
function myFieldOnChange() {
var myField= document.getElementById("myFieldID")
myField.setAttribute('readonly', true)
如果您在多个视图中使用表单,也许在前端完成此操作的最佳方法之一是 widget-tweak。
如果您不想安装额外的库,您可以简单地手动添加字段并使用 django 输入属性。 像这样:
<input
name="{{ form.fieldname.name }}"
type="{{ form.fieldname.widget.input_type }}"
readonly="readonly"
>
</input>