Как создать сериализаторы для нескольких классов в Django rest Framework?

#django #python-3.x #django-models #django-rest-framework #django-rest-framework-filters

#django #python-3.x #django-модели #django-rest-framework #django-rest-framework-filters

Вопрос:

Это мои взгляды

 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


  

Я знаю, как создать класс сериализатора для одной модели

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

Как я могу создать класс сериализатора для нескольких моделей в соответствии с моими приведенными выше представлениями? Схема модели та же.

Комментарии:

1. Вам просто нужен сериализатор, а не сериализатор модели.

2. @Sayse Проблема решена.

Ответ №1:

После некоторых исследований я нахожу эту документацию rest multiple model и шаги по включению django rest multiple model здесь django rest multiple model в проект После этого все, что мне нужно, чтобы изменить следующий код в моих представлениях и использовать serialize для всех моделей следующим образом:

 
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

  

Я рад, что мой код работает нормально, и создаю api.