подписать пользовательскую модель с помощью CreateMixinModel - PullRequest
0 голосов
/ 03 июля 2019

Я хочу написать API для пользовательской модели с помощью MiXin. Я написал CustomUser, который наследует пользовательскую модель Django. Затем я определил профиль ученика с некоторыми атрибутами. в serilizer.py я определил поля, которые я хочу получать от пользователей. Сейчас в Views.py я не знаю, как написать код, чтобы зарегистрировать пользователя с CreateMixinModel

class StudentSignUpView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView, ):
    """This part is relatng to sign up students a"""
    queryset = Student.objects.all()
    serializer_class = StudentSignUpSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request,**kwargs):
        serializer = self.get_serializer(data=request.POST)
        print("answerrrrrr----------->>>", serializer)
        if serializer.is_valid():
            customusers = CustomUser.objects.all()

Я хочу, чтобы пользовательский пользователь мог зарегистрироваться

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете использовать дженерики ListCreateAPIView, и вам не нужно писать и получать и отправлять сами.

Сериализатор должен обрабатывать все создание пользователя.

Не ясно, является ли Student вашей пользовательской моделью пользователя или нет. Я предполагаю, что это так.

Итак, ваше мнение:

class StudentSignUpView( generics.ListCreateAPIView ):
    """This part is relatng to sign up students a"""
    queryset = Student.objects.all()
    serializer_class = StudentSignUpSerializer

Ваш сериализатор:

class StudentSignUpSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student

        fields = ("username", "password")

    def create(self, validated_data):
        user = Student.objects.create_user(username=validated_data["username"],
                                        password=validated_data["password"])

        return user

Вы можете использовать свою пользовательскую модель в сериализаторе, и если вы унаследовали от AbstractUser от django, вы можете использовать метод create_user для создания пользователя, а также он делает некоторые магические вещи (посмотрите реализацию).

Если вам нужно сделать что-то еще, как вы упомянули, с некоторым профилем студента, вы можете сделать это в сериализаторе после создания пользователя (возможно, в виде одной атомарной транзакции).

...