gpt4 book ai didi

django - 表单中的条件字段

转载 作者:行者123 更新时间:2023-12-04 17:54:20 24 4
gpt4 key购买 nike

我需要根据用户是否登录来创建一个可能有或没有 ReCaptcha 字段的 Form 类。

因为这是一个 CommentForm,我无法访问 request表单创建/定义上的对象,所以我不能依赖它。

对于 POST要求解决方案很简单:我有这个:

class ReCaptchaCommentForm(CommentForm):
def __init__(self, data=None, *args, **kwargs):
super(ReCaptchaCommentForm, self).__init__(data, *args, **kwargs)
if data and 'recaptcha_challenge_field' in data:
self.fields['captcha'] = ReCaptchaField()

完成此操作后,表单验证应按预期工作。现在的问题是在模板方面。我需要模板是这样的:
<form action={% comment_form_target %} method="post">
{# usual form stuff #}
{% if not user.is_authenticated %}
<script type="text/javascript"
src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>
<div id="recaptcha-div"></div>
<script type="text/javascript">
Recaptcha.create({{ public_key }}, "recaptcha-div",
{ theme: 'white',
callback: Recaptcha.focus_response_field });
</script>
{% endif %}
</form>

但我不想在每个 comments/*/form.html 上都重复该代码模板。我认为应该有某种方法可以从小部件的 render 添加等效代码。方法和 Media定义。

谁能想到一个很好的方法来做到这一点?

最佳答案

我假设您在 View 中设置了表单,因此您可以将用户从请求传递到表单(就像在 auth app SetPassword 表单中一样):

def __init__(self, user, data=None, *args, **kwargs):
super(ReCaptchaCommentForm, self).__init__(data, *args, **kwargs)
if user.is_authenticated():
self.fields['captcha'] = ReCaptchaField()

关于django - 表单中的条件字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10921562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com