gpt4 book ai didi

python - Django 表格 : making a disabled field persist between validations

转载 作者:太空狗 更新时间:2023-10-29 21:53:47 25 4
gpt4 key购买 nike

在某些时候,我需要显示 "disabled"(由 disabled="disabled" 属性变灰)"select" 。按照标准(xhtml 和 html4)的规定,"select" 类型的输入不能有 "readonly" 属性。请注意,这仅用于演示目的,实际值必须在 POST 中结束。所以这就是我所做的(引用 django 中的表单声明的一部分):

from django import forms

_choices = ['to be', 'not to be']
class SomeForm(forms.Form):
field = forms.ChoiceField(choices=[(item, item) for item in _choices],
widget=forms.HiddenInput()) # the real field

mock_field = forms.ChoiceField(required=False, # doesn't get submitted
choices=[(item, item) for item in _choices],
label="The question",
widget=forms.Select(attrs={'disabled':'disabled'}))

然后是这样初始化的:

initial_val = 'to be'
form = SomeForm(ititial={'field':initial_val,
'mock_field':initial_val})

一切都很好。好吧,直到表单得到验证并且其他字段之一未通过验证。发生这种情况时,将重新加载表单并保留值,但不会保留“mock_field”之一 - 它从未提交(已禁用)。所以没有保存下来。虽然这不会影响数据完整性,但在表示方面仍然不太好。

有什么方法可以保留该字段,同时尽可能减少黑客攻击?表单是 django.contrib.formtools.FormWizard 的一部分,初始值(和一些字段)是动态生成的。基本上,已经有很多事情在进行,如果可以不使事情过于复杂,那就太好了。

最佳答案

浏览器不会发布禁用的字段。

您可以尝试将 field 的初始值复制到 Form 的 __init__ 中的 mock_field

def __init__(self, *args, **kwargs):
super(SomeForm, self).__init__(*args, **kwargs)
mock_initial = self.fields['field'].initial
self.fields['mock_field'].initial = mock_initial

代码未经测试。通常你也会关心 form.data,但在这种情况下,它与 initial

没有什么不同

关于python - Django 表格 : making a disabled field persist between validations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com