有没有办法用查询字符串填充表单?
Posted
技术标签:
【中文标题】有没有办法用查询字符串填充表单?【英文标题】:Is there a way to populate a form with a querystring? 【发布时间】:2013-08-07 15:11:45 【问题描述】:正如标题中所说,
我有一个包含 2 个字段的 django 表单:
class MyForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField(max_length=100)
还有一个像
这样的查询字符串subject=this&message=that
有没有办法在不手动解析查询字符串的情况下填充表单?
查询字符串是使用 jquery 的 .serialize()
保存的(在 db 中)形式。
我正在使用 django 1.5
编辑:
做类似的事情:
form = Myform(my_model.querystring)
给我一个包含良好初始数据但没有 clean_data 的表单
【问题讨论】:
为什么不直接解析呢?只需要两三行代码。 您的标题要求回答是或否,我怀疑这是否真的是您想要的。如果是,答案是肯定的。 【参考方案1】:无论您使用 POST 数据还是 GET 数据,实例化表单都是完全相同的。在这种情况下,您只需要执行form = MyForm(request.GET)
。
【讨论】:
查询字符串来自 db 模型,将其作为第一个参数传递有一个奇怪的行为,调用后 form.fields['subject'].initial 有效但 form.cleaned_data['subject'] 无效form.is_valid()(返回 True)cleaned_data 为空 我无法想象您为什么要在数据库中保存原始查询字符串,这似乎是一件很奇怪的事情。但是你可以用它来实例化一个QueryDict,这就是 Django 对请求数据所做的事情,然后将其传递给表单。 我已经在这样做了,但它没有帮助,它仍然以相同的方式运行,我将查询字符串保存在数据库中的原因是让用户能够以大复杂的形式保存他们的搜索 发生这种情况的另一种情况是,当通过 $('form').serialize() 提交的 AJAX 仅使用查询字符串填充 request.body 时。在这种情况下 request.GET 和 request.POST 都不可用。【参考方案2】:好的,最后必须这样做才能让它工作。
from django.http import QueryDict
form = Myform(QueryDict(my_model.querystring).dict())
.dict() 成功了,使用原始 QueryDict 不起作用,initial=QueryDict().dict()
也是如此
【讨论】:
以上是关于有没有办法用查询字符串填充表单?的主要内容,如果未能解决你的问题,请参考以下文章