cleaned_data在Django中有什么用途


Django判断form.is_valid()是否为Trueform.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);

表单2是否包含表单1的cleaned_data或未验证的数据。

除了将任何日期转换为python日期时间对象之外,是否还有一个使用cleaned_data与未验证数据进行比较的好例子。感谢

TL;DR

form.cleaned_data返回一个已验证表单输入字段及其值的字典,其中字符串主键作为对象返回。

form.data以字符串格式(即非对象(返回未验证表单输入字段及其值的字典。

代码示例

在我的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>

有两种情况:使用基本Form(forms.Form(和

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()阶段通过,则不存在任何未验证的数据。

相关内容

  • 没有找到相关文章

最新更新