python – Django:如何在验证之前将数据添加到ModelForm子类?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django:如何在验证之前将数据添加到ModelForm子类?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1460字,纯文字阅读大概需要3分钟。
内容图文
![python – Django:如何在验证之前将数据添加到ModelForm子类?](/upload/InfoBanner/zyjiaocheng/730/03bdbbf7b6814c84bba3f34fa0961a08.jpg)
作为Django中表单验证的一部分,我想检查用户上次发帖的时间.
我已经看过了堆栈溢出的this和this问题,它似乎解决了这个问题,并且最初使用了接受的答案here.本质上,此过程实际上是在此期间添加request.user对象.
def form_valid(self, form):
CreateView子类的方法.但是,这不允许在表单验证期间使用用户变量.
由于我想在验证期间访问用户变量,因为自上一篇文章以来的检查时间是逻辑验证,我需要先注入表单的用户变量.
我试过改变get_initial()方法:
def get_initial(self):
initial = super(ArticleCreateView, self).get_initial()
initial['user'] = self.request.user
return initial
这成功地在初始字典中设置了[‘user’]键,但这从未通过清理过程,该过程仅处理[‘data’]字典中的内容,并删除初始内容中的任何内容.我故意将用户从表单显示中排除,但这似乎也将其从清理过程和验证中删除.
这样做的正确方法是覆盖Form的init()方法和视图的get_initial()方法,将’user’放入initial,然后将表单中的额外信息从初始化拉到表单中()?
我想将request.user传递给表单,然后我可以在表单范围的clean()方法中访问它来进行额外的检查,这相当于验证.
def clean(self):
super(ArticleForm, self).clean()
**check whether user has posted recently, if so, raise ValidationError**
return self.cleaned_data
解决方法:
您可以覆盖CreateView的get_form_kwargs方法(在您的情况下为ArticleCreateView)以将用户传递给表单.
def get_form_kwargs(self):
kwargs = super(ArticleCreateView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
覆盖表单的init方法
...
def __init__(self, *args, **kwargs):
self.user = kwargs.pop("user")
现在,您可以在clean方法中使用self.user.
内容总结
以上是互联网集市为您收集整理的python – Django:如何在验证之前将数据添加到ModelForm子类?全部内容,希望文章能够帮你解决python – Django:如何在验证之前将数据添加到ModelForm子类?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。