使用来自 URL 的参数进行 django 表单字段验证

弗兰科夫

我有一个基于CreateView的访问创建类它从 URL 访问组织,因此它作为关键字 arg 传入。

class VisitCreate(LoginRequiredMixin, UserOrgRequiredMixin, CreateView):
    model = models.Visit
    form_class = VisitCreateForm
    # template_name is "visit_form.html" from CreateView

    def form_valid(self, form):
        # get the patient for this visit
        patient = models.Patient.get_by_pk(self.kwargs['patientId'])
        if not patient or patient.organization.name != self.kwargs['orgStr']:
            raise SuspiciousOperation('Patient does not exist')

我想编写一个表单字段验证器来检查有关访问的某些内容,但它需要 orgStr。这是当前的表单字段验证器,但它无法获取 orgStr:

class VisitCreateForm(ModelForm):
    class Meta:
        model = models.Visit
        ...
    # Allow only one visit per day
    def clean_visit_date(self):
        visit_date = self.cleaned_data['visit_date']
        if models.Visit.get_visits(visit_date, visit_date, self.kwargs['orgStr']):
            raise ValidationError('There is already a visit on this date')

如何在visit_date 上标记字段错误?要么我必须以某种方式将 orgStr 传递给表单,要么在 VisitCreate.form_valid 中标记字段错误。

请不要建议将 orgStr 添加为表单中的隐藏字段。这似乎很疯狂。

阿拉斯代尔

您可以覆盖视图的get_form_kwargs方法以orgStr从 URL传递

class VisitCreate(LoginRequiredMixin, UserOrgRequiredMixin, CreateView):
    def get_form_kwargs(self):
        kwargs = super(VisitCreate, self).get_form_kwargs()
        kwargs['orgStr'] = self.kwargs['orgStr']
        return kwargs

然后,您需要覆盖表单的__init__方法来处理orgStr.

class VisitCreateForm(ModelForm):
    ...

    def __init__(self, *args, **kwargs):
        self.orgStr = kwargs.pop('orgStr')
        super(VisitCreateForm, self).__init__(*args, **kwargs)

    # You can now access `self.orgStr` in the `clean_visit_date` method.
    def clean_visit_date(self):
        visit_date = self.cleaned_data['visit_date']
        if models.Visit.get_visits(visit_date, visit_date, self.orgStr):
            raise ValidationError('There is already a visit on this date')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用来自Django数据库的数据填充表单字段

使用来自关联对象的数据自动填充 Django 模型表单字段

使用来自html表单的多个输入作为url中的变量以进行ajax调用

使用 Django 处理来自输入字段或表单字段的输入

Django-如何向表单字段添加验证器(而不是对其进行设置)

如何从渲染中排除Django表单字段,但仍将其保留以进行验证?

如何在不进行管理验证的情况下制作Django表单字段

Django如何使用参数表单上下文预填充表单字段

Django:使用来自 url 的外键创建对象

如何使用来自数据库的值来验证Tapestry的表单字段?

Django表单字段验证错误

使用多个表单字段进行服务器端验证

Laravel 5.7使用与模型属性不同的表单字段进行验证

使用Django进行条纹-使form clean()方法返回的值不是表单字段

Flask:使用来自表单动作的参数调用函数

尝试使用jQuery验证表单字段

如何使用 Javascript 验证表单字段

Django使用酥脆的表单使用CSS渲染表单字段

使用来自 Linux 的证书对 Azure 进行身份验证

使用来自字段的参数作为方法调用双数组

尝试使用来自atomsphere的jquery插件在流星表单提交上进行表单验证

使用来自其他字段的 SUM 进行 SQL 更新

laravel,从 URL 参数自动填充表单字段

Django表单字段取决于Crispy Forms的参数

Django 文件上传,无法使用来自实例对象的表单添加文件字段

Django:验证前请处理表单字段

验证空白Django表单字段不起作用

django表单字段输入时如何验证?

django表单字段作为列表,使用post