-1

How to combine many models in one query set so that it would be possible to use HyperlinkedModelSerializer using pagination? I need to connect many models with the same fields. That's what I did, but it doesn’t suit me.:

#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)
Madiyor
  • 761
  • 9
  • 23

1 Answers1

0

Here is the solution to my problem !!!

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