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中是否存在用户名所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)