How to create serializers for multiple class in Django rest framework?

393 Views Asked by At

This is my views

class FindKeyWordNews(ListAPIView):
    queryset = []
    serializer_class = KeyWordSerializers

    def get_queryset(self):
        query_list = []
        keyword = self.kwargs.get("keyword")
        if keyword:
            republic = Republic.objects.filter(Q(headline__icontains=keyword)).order_by('-id')
            ndtv = Ndtv.objects.filter(Q(headline__icontains=keyword)).order_by('-id')
            indiatoday = Indiatv.objects.filter(Q(headline__icontains=keyword)).order_by('-id')
            hindustan = Hindustan.objects.filter(Q(headline__icontains=keyword)).order_by('-id')
            thehindu = Thehindu.objects.filter(Q(headline__icontains=keyword)).order_by('-id')
            zee = Zeenews.objects.filter(Q(headline__icontains=keyword)).order_by('-id')
            query_list = list(chain(republic, ndtv, indiatoday, hindustan, thehindu, zee))

        return query_list


I know to create serializer class for a single model

class NdtvSerializers(serializers.ModelSerializer):
    class Meta:
        model =Ndtv
        fields = ('headline', 'link', 'date', 'category', 'sentiment')

How can I create serializer class for multiple models insrtance for my above views? The schema of the model is the same.

1

There are 1 best solutions below

0
imsaiful On BEST ANSWER

After some research I find this documentation rest multiple model and steps to include django rest multiple model is here django rest multiple model in project After that all I need to to change the following code in my views and use serialize for all models in following manner:


class FindKeyWordNews(ObjectMultipleModelAPIView):
    querylist = []

    def get_querylist(self, *args, **kwargs):
        keyword = self.kwargs.get("keyword")
        print(keyword)
        if keyword:
            queryset = [
                {'queryset': Republic.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': RepublicSerializers},
                {'queryset': Ndtv.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': NdtvSerializers},
                {'queryset': Indiatv.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': IndiatvSerializers},
                {'queryset': Hindustan.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': HindustanSerializers},
                {'queryset': Thehindu.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': TheHinduSerializers},
                {'queryset': Zeenews.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': ZeeNewsSerializers},
                {'queryset': News18.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': News18Serializers},
                {'queryset': Firstpost.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': FirstpostSerializers},
                {'queryset': Indianexpress.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': IndianexpressSerializers},
                {'queryset': Oneindia.objects.filter(Q(headline__icontains=keyword)).order_by('-id'),
                 'serializer_class': OneindiaSerializers},
            ]

            return queryset

I am happy My code is working fine and create the api.