过滤原始查询Django Rest Framework过滤器

时间:2019-04-03 12:50:03

标签: django postgresql django-rest-framework django-filters

当我要查询和过滤时:

'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 :(得分:0)

由于get_queryset方法调用self.queryset.all(),但是raw查询未提供Queryset Object,因此在获取.all()时会出错方法。

因此重写get_queryset()方法并返回原始查询

class groupdatagercekzamanliveriListView(ListAPIView):

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