[英]How to put a value from request.GET as a hidden input in django-crispy-forms
例如,让我们看一下django.contrib.auth中的“ next”参数
如果客户端尝试访问某些仅对经过身份验证的用户可用的资源,则将修改登录URL并附加额外的参数?next=the_next_url
。 然后, LoginForm
可以将此参数设置为context_data
并生成带有包含其值的隐藏输入的表单,例如
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
但是,如果我完全使用django-crispy-form生成表单,该怎么办? 在这种情况下,模板文件仅包含任何内容
{% crispy_tag form %}
form
将被设置为上下文数据,这意味着我必须将来自request.GET的参数作为隐藏的输入小部件推送到表单中。
我该怎么办?
最后,我自己弄清楚了。
要解决此问题,应将基于原始模板的解决方案中的context_data作为initial
forms.Form
传递给forms.Form
的构造forms.Form
。
例如,对于django CVB, get_initial
是将初始数据传递到表单的正确点
def get_initial(self):
initial = Super(ThisCBV, self).get_initial()
redirect_field_name = self.get_redirect_field_name()
if (redirect_field_name in self.request.GET and
redirect_field_value in self.request.GET):
initial.update({
"redirect_field_name": redirect_field_name,
"redirect_field_value": self.request.REQUEST.get(
redirect_field_name),
})
return initial
然后,可以在Forms.Form的实例中动态添加字段。
def __init__(self, *args, **kwargs):
super(ThisForm, self).__init__(*args, **kwargs)
if ('redirect_field_name' in kwargs['initial'] and
'redirect_field_value' in kwargs['initial']):
self.has_redirection = True
self.redirect_field_name = kwargs['initial'].get('redirect_field_name')
self.redirect_field_value = kwargs['initial'].get('redirect_field_value')
## dynamically add a field into form
hidden_field = forms.CharField(widget=forms.HiddenInput())
self.fields.update({
self.redirect_field_name: hidden_field
})
## show this field in layout
self.helper = FormHelper()
self.helper.layout = Layout(
Field(
self.redirect_field_name,
type='hidden',
value=self.redirect_field_value
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.