当我通过分组获取数据时,分组的名称保持不变。当我从查询中提取组名称时,出现错误:“无法分配“'Torna 2'”:“gercekzamanlıveri.isyeri”必须是“ isyerleri”实例。”
seralizer.py
class isyerleriserializer(serializers.ModelSerializer):
class Meta:
model = isyerleri
fields = '__all__'
class malzemelerserializer(serializers.ModelSerializer):
class Meta:
model = malzemeler
fields = '__all__'
class isyerimalzemebilgileriserializer(serializers.ModelSerializer):
class Meta:
model = isyerimalzemebilgileri
fields = '__all__'
class gercekzamanlıveriserializer(serializers.ModelSerializer):
class Meta:
model = gercekzamanlıveri
fields = '__all__'
class groupdatagercekzamanlıveriserializer(serializers.Serializer)
id = serializers.IntegerField()
isyeri = serializers.SlugRelatedField(
read_only=False,
queryset=isyerleri.objects.all(),
slug_field='isyeri'
)
brut_uretim_suresi = serializers.IntegerField()
net_uretim_miktari = serializers.IntegerField()
teorik_uretim_miktari = serializers.IntegerField()
tee = serializers.IntegerField()
toplam_ciro = serializers.IntegerField()
toplam_maliyet = serializers.IntegerField()
vt = serializers.IntegerField()
views.py
class groupdatagercekzamanliveriListView(ListAPIView):
query2 = gercekzamanlıveri.objects.raw("""SELECT 1 as id,
SUM(net_uretim_miktari) as net_uretim_miktari,
SUM(teorik_uretim_miktari) as teorik_uretim_miktari,
ROUND((SUM(net_uretim_miktari)/SUM(teorik_uretim_miktari)::float*100)) as tee,
SUM (toplam_ciro) as toplam_ciro, SUM (toplam_maliyet) as toplam_maliyet,
((SUM(toplam_ciro)-SUM(toplam_maliyet))/SUM (toplam_maliyet)::float*ROUND((SUM(net_uretim_miktari)/SUM(teorik_uretim_miktari)::float*100))) as vt
FROM (SELECT tee_gercekzamanlıveri.id,tee_isyerleri.isyeri as isyeri,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 """)
queryset = query2
serializer_class = groupdatagercekzamanlıveriserializer
所有组的查询“ isyeri”的结果都是相同的
[
{
"id": 1,
"isyeri": "Torna 1",
"brut_uretim_suresi": 445,
"net_uretim_miktari": 17560,
"teorik_uretim_miktari": 18691,
"tee": 94,
"toplam_ciro": 282100,
"toplam_maliyet": 225300,
"vt": 23
},
{
"id": 1,
"isyeri": "Torna 1",
"brut_uretim_suresi": 445,
"net_uretim_miktari": 20410,
"teorik_uretim_miktari": 26353,
"tee": 77,
"toplam_ciro": 174350,
"toplam_maliyet": 120420,
"vt": 34
}
]