【问题标题】:How to create serializers for multiple class in Django rest framework?如何在 Django rest 框架中为多个类创建序列化器?
【发布时间】:2019-04-21 17:37:38
【问题描述】:

这是我的看法

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')

如何为上述视图创建多个模型实例的序列化程序类?模型的架构是相同的。

【问题讨论】:

  • 你只需要一个序列化器,而不是模型序列化器。
  • @Sayse 问题解决了。

标签: django python-3.x django-models django-rest-framework django-rest-framework-filters


【解决方案1】:

经过一些研究,我找到了这个文档rest multiple model,并且包含 django rest 多个模型的步骤在这里django rest multiple model in project 之后,我需要在我的视图中更改以下代码,并以下列方式对所有模型使用序列化:


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。

【讨论】:

    猜你喜欢
    • 2021-04-15
    • 2021-12-15
    • 1970-01-01
    • 2017-03-04
    • 2020-04-11
    • 2017-11-06
    • 2017-08-22
    • 2015-06-29
    • 1970-01-01
    相关资源
    最近更新 更多