Фильтр необработанных запросов Django Rest Framework Filter - PullRequest
0 голосов
/ 03 апреля 2019

Когда я хочу запросить и отфильтровать:

Объект 'RawQuerySet' не имеет атрибута 'all'

views.py

class groupdatagercekzamanliveriListView(ListAPIView):

    query2 = gercekzamanlıveri.objects.raw("""SELECT isyeri_id as id,isyeri_id,
    CONCAT((ROUND(SUM(net_uretim_miktari)/SUM(teorik_uretim_miktari)::float*100)),'%%') as gtee
    FROM (SELECT tee_gercekzamanlıveri.id,tee_gercekzamanlıveri.isyeri_id,tee_malzemeler.malzeme as malzeme,tee_gercekzamanlıveri.tarih,tee_gercekzamanlıveri.brut_uretim_suresi,tee_gercekzamanlıveri.net_uretim_miktari,tee_isyerimalzemebilgileri.net_islem_zamani,tee_isyerimalzemebilgileri.satis_fiyati,tee_isyerimalzemebilgileri.uretim_maliyeti,
        (tee_gercekzamanlıveri.brut_uretim_suresi*60/tee_isyerimalzemebilgileri.net_islem_zamani) as teorik_uretim_miktari,
        ROUND((tee_gercekzamanlıveri.net_uretim_miktari/(tee_gercekzamanlıveri.brut_uretim_suresi*60/tee_isyerimalzemebilgileri.net_islem_zamani)::float)*100::float) as tee,
        (tee_isyerimalzemebilgileri.satis_fiyati*tee_gercekzamanlıveri.net_uretim_miktari) as toplam_ciro,
        (tee_isyerimalzemebilgileri.uretim_maliyeti*tee_gercekzamanlıveri.net_uretim_miktari) as toplam_maliyet,
        ROUND((ROUND((tee_gercekzamanlıveri.net_uretim_miktari/(tee_gercekzamanlıveri.brut_uretim_suresi*60/tee_isyerimalzemebilgileri.net_islem_zamani)::float)*100::float))*(((tee_isyerimalzemebilgileri.satis_fiyati*tee_gercekzamanlıveri.net_uretim_miktari)-(tee_isyerimalzemebilgileri.uretim_maliyeti*tee_gercekzamanlıveri.net_uretim_miktari))/(tee_isyerimalzemebilgileri.uretim_maliyeti*tee_gercekzamanlıveri.net_uretim_miktari)::float)) as vt FROM tee_gercekzamanlıveri
INNER JOIN tee_isyerleri ON tee_gercekzamanlıveri.isyeri_id= tee_isyerleri.id
INNER JOIN tee_malzemeler ON tee_gercekzamanlıveri.malzeme_id= tee_malzemeler.id
INNER JOIN tee_isyerimalzemebilgileri ON tee_isyerimalzemebilgileri.isyeri_id= tee_gercekzamanlıveri.isyeri_id 
AND tee_isyerimalzemebilgileri .malzeme_id = tee_gercekzamanlıveri.malzeme_id) as a GROUP BY isyeri_id""")

    serializer_class = groupdatagercekzamanlıveriserializer
    queryset = query2
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('id',)

serializer.py

class groupdatagercekzamanlıveriserializer(serializers.Serializer):

    id = serializers.IntegerField()
    gtee = serializers.CharField()

Когда данные результата выполнения запроса:

{
"id": 1,
"gtee": "77%"
}
{
"id": 2,
"gtee": "94%"
}

1 Ответ

0 голосов
/ 03 апреля 2019

Поскольку get_queryset вызов метода self.queryset.all(), но запрос raw не предоставляет Queryset Object, поэтому вы получаете ошибку при получении .all() метода.

Переопределите метод get_queryset () и верните необработанный запрос

class groupdatagercekzamanliveriListView(ListAPIView):

    def get_queryset(self)
       return gercekzamanlıveri.objects.raw('...')
...