Gre*_*reg 48 python forms django cleaned-data formset
当我有一个有效的Django表单时,我可以使用form.cleaned_data访问数据.但是,当表单无效时,如何获取用户输入的数据,即form.is_valid为false.
我正在尝试访问表单集中的表单,因此form.data似乎只是给我一个烂摊子.
Dmi*_*erg 44
您可以使用
form.data['field_name']
Run Code Online (Sandbox Code Playgroud)
这样您就可以获得分配给该字段的原始值.
S.L*_*ott 17
见http://docs.djangoproject.com/en/dev/ref/forms/validation/#ref-forms-validation
其次,一旦我们确定我们正在考虑的两个字段中的组合数据无效,我们必须记住将它们从cleaning_data中删除.
事实上,如果表单中有任何错误,Django目前将完全清除cleaning_data字典.但是,这种行为将来可能会发生变化,因此首先要清理自己并不是一个坏主意.
原始数据始终可用request.POST.
评论表明,重点是做一些听起来更复杂的字段级验证.
每个字段都有未经验证的数据,并返回有效数据或引发异常.
在每个字段中,可以对原始内容进行任何类型的验证.
小智 13
我正在努力解决类似的问题,并在这里遇到了一个很好的讨论:https://code.djangoproject.com/ticket/10427
它根本没有详细记录,但对于实时表单,您可以使用以下内容查看字段的值 - 如窗口小部件/用户所示 -
form_name['field_name'].value()
Run Code Online (Sandbox Code Playgroud)
我有很多方法.所有你可以选择.
我想表格如下:
class SignupForm(forms.Form):
email = forms.CharField(label='email')
password = forms.CharField(label='password',
widget=forms.PasswordInput)
Run Code Online (Sandbox Code Playgroud)
1-1.从获得request
def signup(req):
if req.method == 'POST':
email = req.POST.get('email', '')
password = req.POST.get('password', '')
Run Code Online (Sandbox Code Playgroud)
2-1.获取raw value分配给该字段并返回data字段属性的值
def signup(req):
if req.method == 'POST':
...
sf = SignupForm(req.POST)
email = sf["email"].data
password = sf["password"].data
...
Run Code Online (Sandbox Code Playgroud)
2-2.获取分配给该字段的原始值并返回value字段属性的值
def signup(req):
if req.method == 'POST':
...
sf = SignupForm(req.POST)
email = sf["email"].value()
password = sf["password"].value()
...
Run Code Online (Sandbox Code Playgroud)
2-3.获取dictionary分配给字段
def signup(req):
if req.method == 'POST':
...
sf = SignupForm(req.POST)
# print sf.data
# <QueryDict: {u'csrfmiddlewaretoken': [u'U0M9skekfcZiyk0DhlLVV1HssoLD6SGv'], u'password': [u''], u'email': [u'hello']}>
email = sf.data.get("email", '')
password = sf.data.get("password", '')
...
Run Code Online (Sandbox Code Playgroud)
您可以使用此模式:
class MyForm(forms.Form):
...
def clean(self):
self.saved_data=self.cleaned_data
return self.cleaned_data
Run Code Online (Sandbox Code Playgroud)
在你的代码中:
if form.is_valid():
form.save()
return django.http.HttpResponseRedirect(...)
if form.is_bound:
form.saved_data['....'] # cleaned_data does not exist any more, but saved_data does.
Run Code Online (Sandbox Code Playgroud)
使用form.data不是一个好的解决方案.原因:
| 归档时间: |
|
| 查看次数: |
37517 次 |
| 最近记录: |