Как получить JSON из набора запросов? - PullRequest
0 голосов
/ 09 июля 2019

У этого класса есть запрос к базе данных:

class arizakestirimi_func(ListAPIView):

    serializer_class = arizakestirimiserializer
    def get_queryset(self):
        queryset = isyeriarizabilgileri.objects.raw("""
            SELECT
            M.id as id,M.isyeri as isyeri,
            DATE_PART('day',(M.tarih)::timestamp - (D.mindate)::timestamp) * 24 +
            DATE_PART('hour',(M.tarih)::timestamp - (D.mindate)::timestamp) +
            DATE_PART('minute',(M.tarih)::timestamp - (D.mindate)::timestamp) / 60 as zamanfarki
            FROM arizakestirimi_isyeriarizabilgileri M
            INNER JOIN
            (SELECT DISTINCT ON (isyeri) isyeri,id as id,durustahmini,tarih as mindate
         FROM arizakestirimi_isyeriarizabilgileri 
         WHERE durustahmini='MEKANIK ARIZA' AND isyeri='15400001'
         ORDER BY isyeri, tarih ASC) D
            ON M.isyeri = D.isyeri AND M.durustahmini = D.durustahmini
            ORDER BY M.tarih ASC

          """)
        return queryset

Это класс сериализатора, я определил его в serializer.py:

class arizakestirimiserializer(serializers.Serializer):

    isyeri = serializers.CharField(max_length=30)
    zamanfarki= serializers.FloatField()

Когда я использую django rest framework, я получаю этот json:

[
    {
        "isyeri": "15400001",
        "zamanfarki": 0.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 7.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 603.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 607.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 1655.0
    },
    {
        "isyeri": "15400001",
        "zamanfarki": 1661.0
    }
]

Я хочу использовать этот json непосредственно внутри метода "get_queryset". Как преобразовать результат запроса в json с заданным именем поля, например «serializers.py». Спасибо

1 Ответ

0 голосов
/ 09 июля 2019

Чтобы получить JSON внутри метода get_queryset, вы можете отредактировать ваш код следующим образом:

class arizakestirimi_func(ListAPIView):

serializer_class = arizakestirimiserializer

def get_queryset(self):
    queryset = isyeriarizabilgileri.objects.raw("""
        YOUR QUERY
      """)

    data = self.serializer_class(queryset, many=True).data # This will give you the JSON data

    return queryset
...