gpt4 book ai didi

python - 检查 Django 中是否存在用户名

转载 作者:行者123 更新时间:2023-12-03 21:20:00 24 4
gpt4 key购买 nike

我正在开发一个 Django 项目,用户将能够以一种形式更改他们的用户名以及他们的名字和姓氏。在 forms.py 中,我试图找出用户是否存在。如果是这样,它应该显示一个错误。
问题是如果用户想要更改他的名字和姓氏并将他的用户名留在输入中,则会引发验证错误。显然,该用户名已经存在。
有没有办法检查它是否等于当前登录用户的用户名并避免显示错误?

class ChangeNameForm(forms.ModelForm):
username = forms.CharField(max_length=30)
first_name = forms.CharField(max_length=255)
last_name = forms.CharField(max_length=255)

def clean_username(self):
username = self.cleaned_data['username']

try:
user = User.objects.get(username=username)
except user.DoesNotExist:
return username
raise forms.ValidationError(u'Username "%s" is already in use.' % username)

最佳答案

当 ModelForms 绑定(bind)到模型对象时,它们有一个名为“instance”的属性,即模型对象本身。在您看来,当 request.method == 'POST' ,您可能正在创建这样的表单实例:

form = ChangeNameForm(request.POST, instance=request.user)

如果是这种情况,您可以从表单方法访问已登录的用户,并且您的验证方法可以是这样的:
def clean_username(self):
username = self.cleaned_data['username']
try:
user = User.objects.exclude(pk=self.instance.pk).get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(u'Username "%s" is already in use.' % username)

考虑使用 .exists方法,因为它比您尝试使用 .get 检索所有用户信息时向您的数据库发出更快的查询。方法。代码也变得更简洁了:
def clean_username(self):
username = self.cleaned_data['username']
if User.objects.exclude(pk=self.instance.pk).filter(username=username).exists():
raise forms.ValidationError(u'Username "%s" is already in use.' % username)
return username

或者,您也可以关注 these guidelines引发 ValidationError 时。

我现在无法测试此代码,因此如果有任何问题,我深表歉意。

关于python - 检查 Django 中是否存在用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20010108/

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