作为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,django-forms 来源: https://codeday.me/bug/20190826/1732549.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。