您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Django表单中,如何将字段设置为只读(或禁用)以便无法对其进行编辑?

在Django表单中,如何将字段设置为只读(或禁用)以便无法对其进行编辑?

如该答案所指出,Django 1.9添加了Field.disabled属性

禁用的布尔参数设置为True时,将使用禁用的HTML属性禁用表单字段,以使用户无法对其进行编辑。即使用户篡改了提交给服务器的字段的值,也将忽略该字段,而使用表单的初始数据中的值。

使用Django 1.8及更早版本,要禁用小部件上的输入并防止恶意POST黑客入侵,除了readonly在form字段上设置属性外,还必须清除输入内容

class ItemForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(ItemForm, self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)
        if instance and instance.pk:
            self.fields['sku'].widget.attrs['readonly'] = True

    def clean_sku(self):
        instance = getattr(self, 'instance', None)
        if instance and instance.pk:
            return instance.sku
        else:
            return self.cleaned_data['sku']

或者,if instance and instance.pk用另一个条件替换你正在编辑的条件。你也可以disabled在输入字段中设置属性,而不是readonly

clean_sku函数将确保该readonly值不会被覆盖POST。

否则,没有内置的Django表单字段会在拒绝绑定的输入数据时呈现值。如果这是你想要的,则应该创建一个单独ModelForm的字段,该字段将不可编辑的字段排除在外,然后将它们打印在模板中。

Go 2022/1/1 18:24:53 有352人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶