检查Django中是否存在用户名

检查Django中是否存在用户名,第1张

概述我正在开发一个Django项目,用户可以在一个窗体中改变用户名和姓名.在forms.py中,我试图找出用户是否存在.如果是这样,它应该显示一个错误.问题是,如果用户想要更改他的姓氏,并将其用户名留在输入中,则会引发验证错误.显然,该用户名已经存在.有没有办法检查它是否等于当前记录的用户的用户名,并避免显示错误? class ChangeNameForm(forms.ModelForm): 我正在开发一个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绑定到一个模型对象时,它们有一个名为“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

或者,您也可以在提高ValIDationError时关注these guidelines.

我现在无法测试这个代码,所以如果有什么问题,我们道歉.

总结

以上是内存溢出为你收集整理的检查Django中是否存在用户名全部内容,希望文章能够帮你解决检查Django中是否存在用户名所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存