如何将有关 request.user 的信息提供给 clean 方法
Posted
技术标签:
【中文标题】如何将有关 request.user 的信息提供给 clean 方法【英文标题】:How to give the information about request.user to clean method 【发布时间】:2017-05-27 13:18:31 【问题描述】:我有一个表格:
class CreateConferenceForm(forms.ModelForm):
class Meta:
model = Conference
fields = ['name', 'participants']
def clean(self):
cleaned_data = super(CreateConferenceForm, self).clean()
if not request.user.id in cleaned_data.get('participants'):
raise forms.ValidationError('Error')
但我不知道如何从视图中导入请求对象,因为方法 is_valid 没有附加参数。我该怎么做?
【问题讨论】:
【参考方案1】:给你的表单一个__init__
方法,允许你传递一个用户:
def __init__(self, user, *args, **kwargs):
self.user = user
super().__init__(*args, **kwargs)
现在您可以在 clean 中使用self.user
。无论您在哪里创建表单,请记住传递用户,例如form = CreateConferenceForm(request.user, request.POST)
在视图中。
【讨论】:
self.user = kwargs.pop('user', None)
不会破坏现有代码。当然,这需要检查 self.user
是否干净。
@schwobaseggl:我觉得如果不更新现有代码应该会中断。以上是关于如何将有关 request.user 的信息提供给 clean 方法的主要内容,如果未能解决你的问题,请参考以下文章
将 request.user 传递给 Django 中的模板
如何使用 AbstractUser 类访问 request.user