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



我使用的代码来自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']过滤所有用户来完成,如果电子邮件已经存在,则拒绝请求,但这感觉是一种糟糕的做法。必须有更好的方法!

您应该在字段中添加一个UniqueValidator以确保它是唯一的。

最新更新