David Ramirez
David Ramirez

Reputation: 392

Using two different serializer in one endpoint django rest framework

I'm trying to use two different serializers in endpoint but the second serializer that i assign(UserSerializer) is the one that is getting used. Is there a way to have one specific serializer being used for one specific model so that i can use userSerializer for creating a user and the CategorySerializer to create a category.

class UserSignup(generics.CreateAPIView):
    model = Category
    serializer_class = CategorySerializer 

    model = User
    serializer_class = UserSerializer
    def create(self, request):
        data = request.data
        category_serializer = self.get_serializer(data=request.data, many=True)
        user_serializer = self.get_serializer(data=request.data, many=True)

Upvotes: 4

Views: 4083

Answers (1)

Nafees Anwar
Nafees Anwar

Reputation: 6608

You can only have one serializer class in one API view. If want to use two serializers, you can just use it like this.

class UserSignup(generics.CreateAPIView):
    model = Category
    serializer_class = CategorySerializer 

    def create(self, request):
        data = request.data
        category_serializer = self.get_serializer(data=request.data, many=True)
        user_serializer = UserSerializer(data=request.data, many=True)

Or if really want to have some method for second serializer too, you can do

class UserSignup(generics.CreateAPIView):
    model = Category
    serializer_class = CategorySerializer 

    def get_user_serializer(*args, **kwargs):
        # you can have some logic here...
        return UserSerializer(*args, **kwargs)


    def create(self, request):
        data = request.data
        category_serializer = self.get_serializer(data=request.data, many=True)
        user_serializer = self.get_user_serializer(data=request.data, many=True)

Upvotes: 7

Related Questions