django 将view视图中的对象传入forms表单验证模块中

Posted sly27

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 将view视图中的对象传入forms表单验证模块中相关的知识,希望对你有一定的参考价值。

最近在写一个用户详情表单验证模块时出现了一个问题。我想通过forms表单这个模块,实现前端的表格渲染,(如果有值带值渲染到表格中,如果没有值就渲染为空白),并且可以在提交表格后获得forms模块的表单校验功能。这里就出现一个问题了。。如果有值就带值渲染到页面,这个可以用js或jq来实现。很简单。但是,例如在定义model时有个别的字段是定义为唯一的unique,那么问题来了。如果将当前表再次提交的话,forms验证组件会反馈错误信息,提示该内容已存在了。那么这时候就需要引入一些条件将自己提交的排出(也就是说除自己以外的数据做比较)。

 

有了这个思路,就要解决如果将forms外部的对象引入到forms中作为field。感觉写这个问题的文章好少,都很麻烦,而且看了以后蒙圈,其实就是那么一回事。。

 

首先:要让forms可以接收参数。

在form.py中

class
PSUserForm(forms.Form): def __init__(self, *args, **kwargs): this_user = kwargs.pop(this_user, None) super(PSUserForm, self).__init__(*args, **kwargs) self.user = this_user
  telephone
= forms.CharField(max_length=11, error_messages={required: "该字段不能为空!"}, widget=widgets.TextInput(attrs={"class": "form-control"}), label=电话号码)      clean_telephone(self):   telephone = self.cleaned_data.get(telephone)   telephone_obj = UserDetail.objects.exclude(pk=self.user.userdetail_id).filter(telephone=telephone).first()    if not telephone_obj:    return telephone    else:   raise ValidationError(该电话已经被注册!)

其次:传入想要的对象

form = PSUserForm(request.POST, this_user=request.user)

很简单,本身forms验证组件需要传入表单内容进行验证(request.post中就是前端提交的form表单内容),只需要把额外的参数一同传给forms模块就可以了。是不是简单?

 

以上是关于django 将view视图中的对象传入forms表单验证模块中的主要内容,如果未能解决你的问题,请参考以下文章

18-视图说明

drf视图

两个视图基类

9、Django视图(View与APIView)

django-rest-framework框架总结之View视图之APIViewGenericAPIView视图集ViewSet

Django在forms.py中使用视图或url中的变量