Comment créer un nouvel utilisateur avec django repos cadre et personnalisé de l'utilisateur modèle

J'ai un utilisateur personnalisée modèle et je suis en utilisant django-repos-cadre pour créer des API

models.py:

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        unique=True,
        max_length=254,
    )
    first_name = models.CharField(max_length=15)
    last_name = models.CharField(max_length=15)
    mobile = models.IntegerField(unique=True)
    date_joined = models.DateTimeField(default=timezone.now)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

serializers.py:

class UserSerializer(serializers.ModelSerializer):
    password1 = serializers.CharField(write_only=True)
    password2 = serializers.CharField(write_only=True)

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email', 'mobile', 'password1', 'password2')

views.py:

@api_view(['POST'])
@permission_classes((AllowAny,))
def create_user(request):
    serialized = UserSerializer(data=request.data)
    if serialized.is_valid():
        User.objects.create_user(
            serialized.save()
        )
        return Response(serialized.data, status=status.HTTP_201_CREATED)
    else:
        return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)

Cependant, lorsque j'essaie de créer un nouvel utilisateur, j'obtiens cette erreur:

Obtenu un TypeError lors de l'appel de User.objects.create(). Cela peut être parce que vous avez un domaine accessible en écriture sur le sérialiseur classe qui n'est pas un argument valable pour User.objects.create(). Vous devrez peut-être faire le champ en lecture seule, ou de remplacer le UserSerializer.méthode create() pour gérer cela correctement.

Ce peut-être parce qu'il n'y a pas password1 ou mot_passe2 champs dans le modèle de l'Utilisateur. Mais alors, comment puis-je créer une API pour créer un nouvel utilisateur à l'aide de django-repos-cadre?

OriginalL'auteur Aamu | 2017-03-26