【问题标题】:Access Hidden Inputs in Django forms class访问 Django 表单类中的隐藏输入
【发布时间】:2023-04-08 10:05:02
【问题描述】:

在访问 clean_dataclean function 表单中的隐藏输入时需要帮助。经过大约 1 小时的搜索,无法在此处找到解决方案和 Django 文档

class AccountForm(forms.ModelForm):

class Meta:
    model = Account
    #action = forms.CharField(widget=forms.HiddenInput()) <--- also tried this

    exclude = [
        "a_account_number"
    ]

# Validate that there isn't already an account that exists with a similar company name during account creation
def clean_a_company_name(self):
    logging.debug("Value of action %s") % self.data.__getitem__('action')

    if Account.objects.filter( a_company_name = self.cleaned_data['a_company_name']).exists() and % self.data.__getitem__('action')== 'create':
        logging.debug("In account views - form validation - clean_a_company - company already exists raising exception *****************")
        raise forms.ValidationError(u"An organization with this name and owner already exists. Change the Organization name or edit Organization Account information instead of creating a new Organization Account")
    return self.cleaned_data["a_company_name"]

上面给出了一个 unicode 错误。我也试过了:

%self.fields['action'] 

【问题讨论】:

    标签: django forms validation


    【解决方案1】:

    所以您正在尝试访问清理a_company_name 方法中的action 字段? 您无权访问字段的 clean 方法中的其他字段。您应该使用表单的clean 方法。

    来自 django 文档:

    Form 子类的 clean() 方法。 此方法可以执行任何验证 这需要访问多个 表单中的字段。这是 你可以在哪里放东西检查 如果提供字段 A,则字段 B 必须包含有效的电子邮件地址和 之类的。

    https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

    【讨论】:

    • 这是我的模板:{% extends "site_base.html" %} {% block title %}Editing Organization Account Information{% endblock %} {% block content %} {% ifequal account.owner_id request.user.id %}
      {% csrf_token %} {{account_form.as_table}}
      {% else %}

      {% trans "您不是此帐户的所有者。" %}

      {% endifequal %} {% endblock %}
    • 好的,所以action 字段不是模型表单的一部分。在这种情况下,您可以通过多种方式实现所需的功能:1)在表单验证后检查request.POST.get('action') 2)编写自定义表单(不是 ModelForm)
    • 感谢您的建议。我需要访问验证代码中的隐藏输入,以查看此操作是否是编辑,在这种情况下,帐户已经存在是可以的。 Request.Post 在 Forms clean 功能中不可用。不想写自定义表单,但看起来我可能不得不写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多