如何在默认REST用户模型中强制字段的唯一性?

时间:2016-03-29 12:43:56

标签: django django-rest-framework

我正在使用https://stackoverflow.com/a/19337404/4507367回答

中的代码
@api_view(['POST'])
def register(request):
    VALID_USER_FIELDS = [f.name for f in get_user_model()._meta.fields]
    serialized = UserSerializer(data=request.data)
    if serialized.is_valid():
        user_data = {field: data for (field, data) in request.data.items() if field in VALID_USER_FIELDS}

        user = get_user_model().objects.create_user(
            **user_data
        )
        return Response(UserSerializer(instance=user).data, status=status.HTTP_201_CREATED)
    else:
        return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)

注册用户,但是如果注册请求包含已经使用的电子邮件,我希望注册失败。这可以通过user_data['email']过滤所有用户并在电子邮件已经存在时拒绝请求来完成,但感觉这是一种不好的做法。必须有更好的方法!

1 个答案:

答案 0 :(得分:1)

您应该在字段中添加UniqueValidator以确保其唯一。