Unsupported operand type(s) for *: 'QuerySet' and 'IntegerField'

Im trying to multiply the result from subquery with 1000 but instead i got the error "unsupported operand type(s) for *: 'QuerySet' and 'IntegerField'"

this is my code :

 last_lrpa = LRPA_File.objects.order_by('-file_export_date').first()
 last_mou = FileMouPengalihan.objects.order_by('file_export_date').first()

 sq_1 = MacroData.objects.filter(macro_file=skai_1.macro.macro_file_1, prk=OuterRef('prk'))
 sq_2 = MacroData.objects.filter(macro_file=skai_2.macro.macro_file_1, prk=OuterRef('prk'))
 sq_3 = MacroData.objects.filter(macro_file=skai_3.macro.macro_file_1, prk=OuterRef('prk'))
 sq_mou = MouPengalihanData.objects.filter(file=last_mou, prk=OuterRef('prk'))
        
 lrpa = LRPA_Monitoring.objects.select_related('prk').filter(file=last_lrpa). \
        annotate(ai_1 = Round(sq_1.values('ai_this_year')*1000), aki_1 = sq_1.values('aki_this_year'), status_1 = sq_1.values('ang_status'),
               ai_2 = Round(sq_2.values('ai_this_year')*1000), aki_2 = sq_2.values('aki_this_year'), status_2 = sq_2.values('ang_status'),
               ai_3 = Round(sq_3.values('ai_this_year')*1000), aki_3 = sq_3.values('aki_this_year'), status_3 = sq_3.values('ang_status'),
               mou_jan = sq_mou.values('jan'),mou_feb = sq_mou.values('feb'),mou_mar = sq_mou.values('mar'),mou_apr = sq_mou.values('apr'),
               mou_mei = sq_mou.values('mei'),mou_jun = sq_mou.values('jun'),mou_jul = sq_mou.values('jul'),mou_aug = sq_mou.values('aug'),
               mou_sep = sq_mou.values('sep'),mou_okt = sq_mou.values('okt'),mou_nov = sq_mou.values('nov'),mou_des = sq_mou.values('des'),
               sd_1 = sq_1.values('sumber_dana'), sd_2 = sq_2.values('sumber_dana'), sd_3 = sq_3.values('sumber_dana'),
               )
        
context["lrpa"] = lrpa

sq_1, 2 and 3 use filter() to create recordsets, so even if they only have one record in them, they are assumed to be a set.

If you want to only use the first value, you will need something like.

 ai_2 = Round(sq_2[0]['ai_this_year']*1000)...

or grab it earlier and more robustly (as first will return None if recordset is empty)

sq_2_1 = sq2.first()
if sq_2_1
   ai_2 = Round(sq_2_1['ai_this_year']*1000)...
Back to Top