在表单字段验证中获取请求

Posted

技术标签:

【中文标题】在表单字段验证中获取请求【英文标题】:Get request in form field validation 【发布时间】:2013-07-23 17:16:45 【问题描述】:

我有一个表单,其中验证取决于登录的用户。对于某些用户,某些值是有效的,对于其他用户,它们是无效的。有效和无效是动态的 - 我无法为每个用户组创建新表单。

更重要的是,我需要在更多表单中进行相同的验证,因此我创建了自定义表单字段。对于这个自定义表单字段,我需要以某种方式传递用户实例来检查值是否有效。

如何做到这一点?

【问题讨论】:

【参考方案1】:

您不需要额外的字段。

您可以在表单的init() 方法中通过passing it explicitly 或fetching it from the request 访问当前用户。

然后你可以在cleaning你的表单时使用检索到的值。

如果您在多个表单中需要此功能,我会创建一个 base class 来继承专用表单,或者创建一个添加所需功能的 mixin。

【讨论】:

【参考方案2】:

我就是这样做的:

class EventForm(forms.ModelForm):
  def __init__(self, *args, **kwargs):
    user = kwargs.pop('user', None)
    # doing stuff with the user…
    super(EventForm, self).__init__(*args, **kwargs)

在您的视图类/方法中,您必须像这样实例化表单:

form = EventForm(user=request.user, data=request.POST)

【讨论】:

以上是关于在表单字段验证中获取请求的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则

在 Laravel Ajax 请求验证中获取错误字段名称

如何生成和验证 csrf 令牌

Laravel 表单请求动态字段在重定向时消失

flatpickr 字段不显示表单验证消息?

如何在反应中验证多步表单