1

所以我创建了一个自定义表单字段来验证重复的用户名。我使用 Django + Mongoengine 作为我的数据库。我已经插入并使用 django 身份验证系统,所以我假设它可以从 forms.py 访问?也许这个假设是不正确的。所以我有领域

class UsernameField(CharField):
    def to_python(self, value):
        if not value:
            return ""
        return value

    def validate(self, value):
        super(CharField, self).validate(value)

        try:
            # If the user object exists it won't throw an Error/Exception
            user=User.objects.get(username=value) 
            raise ValidationError("Username already exists")
        except:
            pass

但是当我实际在我的表单中使用它时,它似乎总是正确验证,即使我已经调用了检查 form.is_valid() 是否为 True

4

2 回答 2

1

您在 try 块中引发异常,然后在 except 块中通过 pass 将它们扼杀。试试这个,它会检查现有用户,并且只有在存在时才会失败。

    try:
        # If the user object doesn't exist, it validates
        user=User.objects.get(username=value) 
    except django.core.exceptions.DoesNotExist:
        pass
    else:
         #user does exist, barf.
        raise ValidationError("Username already exists")
于 2013-09-12T19:02:13.567 回答
0

呸,这是我的一个愚蠢的错误。由于某种原因,我忘记了我试图引发的错误会被 try 捕获,我会被发送到 except 路线。将其更改为此作品

class UsernameField(CharField):
    def to_python(self, value):
        if not value:
            return ""
        return value

    def validate(self, value):
        super(CharField, self).validate(value)
        usernameDuplicate = False

        try:
            # If the user object exists it won't throw an Error/Exception
            user=User.objects.get(username=value) 
            usernameDuplicate = True
        except:
            pass

        if usernameDuplicate==True:
            raise ValidationError("Username already exists")
于 2013-09-12T19:01:26.930 回答