dja*_*o11 1 django django-forms
如何将请求传递给Django表单?
我正在创建django更新配置文件表单,用户可以在其中更改配置文件电子邮件。我想检查表单中的电子邮件是否属于登录用户,然后再将其设置为新用户电子邮件,然后检查其他用户是否使用了此电子邮件。
这是我的代码,这个self.request.user.email不起作用:
def clean_email(self):
email = self.cleaned_data.get("email")
owns_email = (email != self.request.user.email)
if User.objects.filter(email__icontains=email).exists() and owns_email:
raise forms.ValidationError("This email aldready registered.")
return email
Run Code Online (Sandbox Code Playgroud)
那么也许有更好的解决方案来解决我的问题?
由于您正在使用cbv,因此可以使用get_form_kwargsFormMixin中的函数。
它可能看起来像这样:
class UserProfileUpdateView(UpdateView):
...
def get_form_kwargs(self):
'''This goes in the Update view'''
kwargs = super(UserProfileUpdateView, self).get_form_kwargs() #put your view name in the super
user = self.request.user
if user:
kwargs['user'] = user
return kwargs
Run Code Online (Sandbox Code Playgroud)
然后,基于上面的代码,您的表单类将如下所示:
class UserProfileUpdateForm:
...
def __init__(self, *args, **kwargs):
if kwargs.get('user'):
self.user = kwargs.pop('user', None)
super(UserProfileUpdateForm, self).__init__(*args,**kwargs)
def clean_email(self):
email = self.cleaned_data.get("email")
owns_email = (email != self.user.email)
if User.objects.filter(email__icontains=email).exists() and owns_email:
raise forms.ValidationError("This email already registered.")
return email
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |