【问题标题】:Django REST framework: how to combine the same type of modelDjango REST框架:如何组合相同类型的模型
【发布时间】:2020-07-27 05:01:05
【问题描述】:

如何在一个查询集中组合多个模型,以便可以通过分页使用 HyperlinkedModelSerializer? 我需要连接许多具有相同字段的模型。 这就是我所做的,但它不适合我。:

#models.py
class Merketing(models.Model):
    question = models.CharField(max_length=500, unique=True)
    answer = models.CharField(max_length=500)

class Management(models.Model):
    question = models.CharField(max_length=500, unique=True)
    answer = models.CharField(max_length=500)


#serializers.py
class MerketingSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Merketing
        fields = ['id','question', 'answer']

class ManagementSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Management
        fields = ['id','question', 'answer']


class FiltersSerializers(serializers.Serializer):
    model_1 = MerketingSerializer(read_only=True,many=True)
    model_2 = ManagementSerializer(read_only=True,many=True)


#viesw.py
class MerketingViewSet(viewsets.ModelViewSet):
    queryset = Merketing.objects.all().order_by('question')
    serializer_class = MerketingSerializer
    permission_classes = [permissions.IsAuthenticated]
    filter_backends = [filters.SearchFilter]
    search_fields = ['question']

class ManagementViewSet(viewsets.ModelViewSet):
    queryset = Management.objects.all().order_by('question')
    serializer_class = ManagementSerializer
    permission_classes = [permissions.IsAuthenticated]
    filter_backends = [filters.SearchFilter]
    search_fields = ['question']



class FiltersView(APIView):
    def get(self, request, *args, **kwargs):
        filters = {}
        filters['model_1'] = Merketing.objects.all().order_by('question')
        filters['model_2'] = Management.objects.all().order_by('question')
        serializer = FiltersSerializers(filters)
        return Response (serializer.data, status=HTTP_200_OK)

【问题讨论】:

标签: django rest django-rest-framework


【解决方案1】:

这是我的问题的解决方案!!!

class Fi2ViewSet(viewsets.ModelViewSet):
    qs1 = Merketing.objects.all()
    qs2 = Management.objects.all()
    qs3=  Macroeconom.objects.all()
    qs4 = Kse.objects.all()

    queryset = qs1.union(qs2,qs3,qs4).order_by('question')
    serializer_class = Fi2Serializer
    permission_classes = [permissions.IsAuthenticated]
    filter_backends = [filters.SearchFilter]
    search_fields = ['question']

serializers.py

class Fi2Serializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Merketing
        fields = ['id','question', 'answer']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 2017-03-27
    • 2018-12-10
    • 1970-01-01
    • 2023-04-08
    • 2020-04-16
    • 2015-04-12
    • 2013-12-22
    相关资源
    最近更新 更多