Вызов набора представлений из другого маршрута

Я использую Django rest-framework, который получает элементы из таблиц и возвращает сериализованный json, при вызове, как показано ниже

localhost/api/mixs?id=12

Исходный код.

class MixViewSet(viewsets.ModelViewSet):
   
    serializer_class = MixSerializer
    filter_backends = [django_filters.rest_framework.DjangoFilterBackend]
    filter_fields = ["id","user"]
    filterset_fields = ['id']
    search_fields = ['id']

    def list(self,request,*args,**kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        
        serializer = self.get_serializer(queryset, many=True)
        custom_data = {
            'items': serializer.data
        }
        custom_data.update({
            'meta':{"api":"Mix"}
        })
        return Response(custom_data)

    def get_queryset(self):
        queryset = Mix.objects.all()

        ids = self.request.query_params.get('ids')
        if ids is not None:
            id_arr = ids.split(',')
            if len(id_arr) > 0:
                queryset = queryset.filter(id__in=id_arr)
        u_key =  self.request.query_params.get('u_key')
        if u_key is not None:
            queryset = queryset.filter(u_key=u_key)
        return queryset

Теперь я хочу использовать эту функцию из другого метода.

Например

def createMix(request):
    #do something and make Mix
    m = Mix(detail={},user=1)
    m.save()
    print(m.id) ### for example 13

    #Now I want to do the equivalent thing 
    #to `localhost/api/mixs?id=13`
    # returning the data id=13

    obj = Mix.objects.get(id=m.id)
    response = MixSerializer(obj)
    print(response)
    return Response(response)
    #AssertionError: You passed a Serializer instance as data, but probably meant to pass serialized `.data` or `.error`. representation

При вызове этого url

localhost/myapp/createsong

Программа делает что-то и вставляет данные в таблицу Mix.

затем выполните эквивалентное действие localhost/api/mixs?id=13

Возможно ли это?

Или моя идея верна?

Возможно, вы можете сделать что-то подобное. Ничто не ограничивает вас в использовании тестового клиента как части кода.

from django.test.client import Client
c = Client()
article = c.post('/api/mixes', {
  'id' : 13,
})
Вернуться на верх