博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django 将view视图中的对象传入forms表单验证模块中
阅读量:4550 次
发布时间:2019-06-08

本文共 1308 字,大约阅读时间需要 4 分钟。

最近在写一个用户详情表单验证模块时出现了一个问题。我想通过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模块就可以了。是不是简单?

 

转载于:https://www.cnblogs.com/sly27/p/10620945.html

你可能感兴趣的文章
个人博客作业Week1
查看>>
AsyncTask 学习笔记
查看>>
Light Oj 1005
查看>>
12、反射
查看>>
Redis中SAVE和BGSAVE的区别
查看>>
归德口有神龟石
查看>>
东风寒·杜甫
查看>>
韵语编年(之九:1983——1985)
查看>>
js声明变量作用域会提前
查看>>
委托详谈
查看>>
五容器
查看>>
【PMP】合同类型
查看>>
类命名空间和对象/实例命名空间
查看>>
脚本的含义
查看>>
BZOJ3669 NOI2014 魔法森林 LCT/最短路
查看>>
503. Next Greater Element II 下一个更大元素
查看>>
CSS3总结七:变换(transform)
查看>>
HTML基本标签2
查看>>
vscode编辑器常用快捷键
查看>>
解决idea server 控制台乱码问题
查看>>