gpt4 book ai didi

python - 以 Django 形式获取请求数据

转载 作者:IT老高 更新时间:2023-10-28 20:32:44 24 4
gpt4 key购买 nike

是否可以在表单类中获取 request.user 数据?我想清理一个电子邮件地址以确保它是唯一的,但如果它是当前用户的电子邮件地址,那么它应该可以通过。

这是我目前拥有的,非常适合创建新用户,但是如果我想编辑一个用户,我会遇到他们的电子邮件无法验证的问题,因为它已经被占用了。如果我可以使用 request.user.email 检查这是他们的电子邮件,那么我将能够解决我的问题,但我不知道该怎么做。

class editUserForm(forms.Form):
email_address = forms.EmailField(widget=forms.TextInput(attrs={'class':'required'}))

def clean_email_address(self):
this_email = self.cleaned_data['email_address']
test = UserProfiles.objects.filter(email = this_email)
if len(test)>0:
raise ValidationError("A user with that email already exists.")
else:
return this_email

最佳答案

正如 ars 和 Diarmuid 所指出的,您可以将 request.user 传递到您的表单中,并将其用于验证电子邮件。然而,Diarmuid 的代码是错误的。代码实际上应该是:

from django import forms

class UserForm(forms.Form):
email_address = forms.EmailField(
widget=forms.TextInput(
attrs={
'class': 'required'
}
)
)

def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(UserForm, self).__init__(*args, **kwargs)

def clean_email_address(self):
email = self.cleaned_data.get('email_address')

if self.user and self.user.email == email:
return email

if UserProfile.objects.filter(email=email).count():
raise forms.ValidationError(
u'That email address already exists.'
)

return email

那么,在你看来,你可以像这样使用它:

def someview(request):
if request.method == 'POST':
form = UserForm(request.POST, user=request.user)
if form.is_valid():
# Do something with the data
pass
else:
form = UserForm(user=request.user)
# Rest of your view follows

请注意,您应该将 request.POST 作为关键字参数传递,因为您的构造函数需要 'user' 作为第一个位置参数。

这样做,您需要将 user 作为关键字参数传递。您可以将 request.POST 作为位置参数或关键字参数(通过 data=request.POST)传递。

关于python - 以 Django 形式获取请求数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com