当我有一个有效的Django表单时,我可以使用form.cleaned_data访问数据.但是,当表单无效时,如何获取用户输入的数据,即form.is_valid为false.
我正在尝试访问表单集中的表单,因此form.data似乎只是给我一个烂摊子.
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()
Run Code Online (Sandbox Code Playgroud)
这是将cleaned_data 保存到模型还是保存未验证的数据。
form2=form1.save(commit=False);
Run Code Online (Sandbox Code Playgroud)
form2 是否包含 form1 的cleaned_data 或未验证的数据。
除了将任何日期转换为 python datetime 对象之外,还有一个很好的例子来说明使用cleaned_data 与未验证数据的好处。谢谢
我正在尝试验证数据库中是否已存在提交的URL.
Form类的相关部分如下所示:
from django.contrib.sites.models import Site
class SignUpForm(forms.Form):
# ... Other fields ...
url = forms.URLField(label='URL for new site, eg: example.com')
def clean_url(self):
url = self.cleaned_data['url']
try:
a = Site.objects.get(domain=url)
except Site.DoesNotExist:
return url
else:
raise forms.ValidationError("That URL is already in the database. Please submit a unique URL.")
def clean(self):
# Other form cleaning stuff. I don't *think* this is causing the grief
Run Code Online (Sandbox Code Playgroud)
问题是,无论我提交什么价值,我都无法提出ValidationError.如果我在clean_url()方法中做了类似的事情:
if Site.objects.get(domain=url):
raise forms.ValidationError("That URL is already in the database. Please submit …Run Code Online (Sandbox Code Playgroud) 我有一个具有内联形式的主窗体.是否可以从内联表单的清理函数访问主表单的cleaning_data?
这就是我要问的原因.
主要表格有一个字段来定义房产是出售还是出租.然后,内联表单显示销售价格字段或租赁金额和存款的字段.我试图验证,如果该物业是出售,那么租赁和存款字段应为空.
我可以在前端界面的视图中执行此操作,但是可以在forms.py中为前端和管理员完成吗?
我有一个名为“单位”的表单字段,如下所示:
units = forms.ChoiceField(choices=[(x, x) for x in range(1, 11)], help_text = 'Units: ')
Run Code Online (Sandbox Code Playgroud)
当我这样做时,form.cleaned_data['units']我得到一个字符串而不是一个整数。如何更改字段以获取整数?
我有一个Django ModelForm,它通过一个模型来公开对应于多对多关系的多选字段,该模型将order选择(文档列表)作为额外属性.在前端,该字段显示为两个与admin中类似的多个选择字段,一个列出可用选项,另一个列出所选元素.
可以使用正确的元素选择保存表单,但它们始终按原始选择顺序排列,而不是选择顺序.浏览器以正确的顺序发送选择,但顺序输入form.cleaned_data['documents']始终是原始顺序的顺序.
如何使MultipleChoiceField尊重所选元素的顺序?
谢谢.
我很困惑为什么当我运行这段代码时它会返回一个错误
create() 接受 1 个位置参数,但给出了 2 个
if request.method == "POST":
my_form = RawProductCreateForm(request.POST)
if my_form.is_valid():
Product.objects.create(my_form.cleaned_data)
Run Code Online (Sandbox Code Playgroud)
但是当我修改 create 方法并在传递清理过的数据之前添加 ** 时它起作用了!
Product.objects.create(**my_form.cleaned_data)
Run Code Online (Sandbox Code Playgroud) cleaned-data ×7
django ×7
django-forms ×3
python ×3
forms ×2
choicefield ×1
formset ×1
integer ×1