Django Form设置文本框为readonly的两种实现方式

追风的人
追风的人
发布时间:2026-10-14 | 6人浏览过
原创

本文介绍在Django开发中如何将Form表单的文本框设置为只读状态。通过两种方法实现:一是在Form类的__init__方法中动态修改widget属性;二是在定义字段时直接指定widget的readonly属性。此外,文章还补充了HTML中disabled与readonly的区别,帮助开发者根据是否需向后端传值选择合适的方案。

Django Form设置文本框只读的实现方法

在使用Django构建Web应用时,有时需要限制前端页面中某些文本框的编辑权限。经过查阅相关资料,可以通过在Form类内部进行配置来实现这一需求。

具体实现方式主要有以下两种:

首先,在自定义的form.py文件中定义一个名为my_info_form的Form类。


** In form.py file **

""" 1. 利用Django form创建自己需要的表单 """
class my_info_form(forms.Form):
 user_id = forms.IntegerField()
 user_name = forms.CharField(max_length=254)
 email = forms.EmailField()

""" 上面的这一小段代码就可以在页面上显示出一个表格, 但是表格里面的文本框IntegerField, CharField, EmailField都处于可编辑状态。 
大多数情况下我们不想要用户可以随意更改页面展示的内容,所以需要对这些文本框进行设置来改变可编辑状态。
代码如下: """

 def __init__(self, *args, **kwargs):
 super(forms.Form, self).__init__(*args,**kwargs)
 self.fields['user_id'].widget.attrs['readonly'] = True
 self.fields['user_name'].widget.attrs['readonly'] = True
 self.fields['email'].widget.attrs['readonly'] = True

""" 编写__init__()方法,
首先, 要调用super(forms.Form, self).__init__(*args,**kwargs), 注意这里的__init__()方法里没有self。*args会传递要展示的信息, **kwargs会传递改变文本框格式的信息。 如果不调用super方法, 会报no fields 错误。

第二, 更改文本框编辑状态:

self.fields['user_id'].widget.attrs['readonly'] = True
self.fields['user_name'].widget.attrs['readonly'] = True
self.fields['email'].widget.attrs['readonly'] = True

第三, 试着运行一下, 你会发现文本框已经不能进行编辑了!
"""

另一种实现路径如下:


""" 
在创建文本框的时候实用Django的widget 设置文本框的属性为 readonly
"""
class my_info_form(forms.Form):
 user_id = forms.IntegerField(widget=forms.TextInput(attrs={'readonly': 'readonly'}))
 user_name = forms.CharField(widget=forms.TextInput(attrs={'readonly': 'readonly'}))
 email = forms.EmailField(widget=forms.TextInput(attrs={'readonly': 'readonly'}))

HTML input标签只读与禁用的区别

补充知识:HTML中input标签设置为不可编辑状态的三种常见方法

第一种方法:使用disabled属性

disabled属性用于禁用input元素。被禁用的输入框不可编辑、不可复制、不可选择,无法获取焦点,且后端不会接收到该字段的传值。应用此属性后,文字颜色通常会变为灰色。需要注意的是,disabled属性不能与<input type="hidden">配合使用。

示例代码:

<input type="text" disabled="disabled" />

第二种方法:使用readonly属性

readonly属性使输入字段变为只读但可复制。用户仍可通过Tab键切换到该字段,能够选中、接收焦点并复制文本内容。与disabled不同,后端可以接收到该字段的传值。readonly属性主要用于防止用户修改内容,适用于<input type="text">或<input type="password">。

示例代码:

<input type="text" readonly="readonly">

第三种方法:结合readonly与unselectable属性

设置readonly unselectable="on"的效果与disabled类似,输入框不可编辑、不可复制、不可选择且无法获取焦点,文字颜色也会变灰。不同之处在于,后端可以接收到该字段的传值。

示例代码:

<input type="text" readonly unselectable="on" >

以上关于Django Form设置文本框为只读的操作内容分享完毕,希望能对读者有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表