Django中cleaned_data有什么用
What is the use of cleaned_data in Django
Django 说如果 form.is_valid()
是 True
。 form.cleaned_data
是存储所有验证字段的地方。但是我对使用 cleaned_data
函数感到困惑。
form.cleaned_data['f1']
-- 清理后的数据
request.POST.get('f1')
-- 未验证数据
我在 Django 中有一个模型表单。
if form1.is_valid():
form1.save()
这是将 cleaned_data 保存到模型还是保存未经验证的数据。
form2=form1.save(commit=False);
form2 是否包含 form1 的 cleaned_data 或未经验证的数据。
除了将任何日期转换为 python 日期时间对象之外,是否有一个很好的例子说明使用 cleaned_data 与未验证数据的好处。
谢谢
有两种情况:使用基本的Form(forms.Form)和ModelForm(forms.ModelForm)。
如果您使用的是 ModelForm,则无需使用 cleaned_data
字典,因为当您使用 form.save()
时,它已经匹配并保存了干净的数据。但是您使用的是基本表单,那么您必须手动将每个 cleaned_data
与其数据库位置匹配,然后将实例保存到数据库而不是表单。
例如基本形式:
if form.is_valid():
ex = Example()
ex.username = form.cleaned_data['username']
ex.save()
例如ModelForm:
if form.is_valid():
form.save()
注意: 如果表单从 is_valid()
阶段通过,则没有任何未经验证的数据。
TL;DR
form.cleaned_data
returns 验证表单输入字段及其值的字典,其中字符串主键作为对象返回。
form.data
returns 未验证表单输入字段的字典及其字符串格式的值(即不是对象)。
代码示例
在我的 forms.py
中,我有两个字段:
class Loginform(forms.Form):
username=forms.CharField()
password=forms.CharField(widget=forms.PasswordInput)
在我的 views.py
:
def login_page(request):
form=Loginform(request.POST or None)
if form.is_valid():
print(form.cleaned_data)
以上代码打印出以下输出:
{'username': 'xyz', 'password': 'shinchan'}
如果 views.py
包含:
def login_page(request):
form=Loginform(request.POST or None)
if form.is_valid():
print(form)
以上代码打印如下:
<tr><th><label for="id_username">Username:</label></th><td><input type="text" name="username" value="xyz" required id="id_username"></td></tr>
<tr><th><label for="id_password">Password:</label></th><td><input type="password" name="password" required id="id_password"></td></tr>
Django 说如果 form.is_valid()
是 True
。 form.cleaned_data
是存储所有验证字段的地方。但是我对使用 cleaned_data
函数感到困惑。
form.cleaned_data['f1']
-- 清理后的数据
request.POST.get('f1')
-- 未验证数据
我在 Django 中有一个模型表单。
if form1.is_valid():
form1.save()
这是将 cleaned_data 保存到模型还是保存未经验证的数据。
form2=form1.save(commit=False);
form2 是否包含 form1 的 cleaned_data 或未经验证的数据。
除了将任何日期转换为 python 日期时间对象之外,是否有一个很好的例子说明使用 cleaned_data 与未验证数据的好处。 谢谢
有两种情况:使用基本的Form(forms.Form)和ModelForm(forms.ModelForm)。
如果您使用的是 ModelForm,则无需使用 cleaned_data
字典,因为当您使用 form.save()
时,它已经匹配并保存了干净的数据。但是您使用的是基本表单,那么您必须手动将每个 cleaned_data
与其数据库位置匹配,然后将实例保存到数据库而不是表单。
例如基本形式:
if form.is_valid():
ex = Example()
ex.username = form.cleaned_data['username']
ex.save()
例如ModelForm:
if form.is_valid():
form.save()
注意: 如果表单从 is_valid()
阶段通过,则没有任何未经验证的数据。
TL;DR
form.cleaned_data
returns 验证表单输入字段及其值的字典,其中字符串主键作为对象返回。
form.data
returns 未验证表单输入字段的字典及其字符串格式的值(即不是对象)。
代码示例
在我的 forms.py
中,我有两个字段:
class Loginform(forms.Form):
username=forms.CharField()
password=forms.CharField(widget=forms.PasswordInput)
在我的 views.py
:
def login_page(request):
form=Loginform(request.POST or None)
if form.is_valid():
print(form.cleaned_data)
以上代码打印出以下输出:
{'username': 'xyz', 'password': 'shinchan'}
如果 views.py
包含:
def login_page(request):
form=Loginform(request.POST or None)
if form.is_valid():
print(form)
以上代码打印如下:
<tr><th><label for="id_username">Username:</label></th><td><input type="text" name="username" value="xyz" required id="id_username"></td></tr>
<tr><th><label for="id_password">Password:</label></th><td><input type="password" name="password" required id="id_password"></td></tr>