关于django中choices的取值(语言-python)

关于django中choices的取值问题。

查询数据的时候,如果查询所有数据

queryset=models.Profit.objects.all()  

得到的结果是:

<QuerySet [<Profit: Profit object (136)>, <Profit: Profit object (137)>, ...]> 

前端可以遍历后通过get_business_display取choices对应的值。

但如果查询数据然后再分类汇总,

queryset_business=queryset.values("business").annotate(Sum("profit"))  

得到的结果是queryset的列表,此时前端通过get_business_display就获取不到choices对应的值了。

这个问题怎么解决?

可以通过在Profit模型中定义一个方法来解决这个问题。例如:

class Profit(models.Model):
BUSINESS_CHOICES = (
('A', 'Business A'),
('B', 'Business B'),
('C', 'Business C'),
)
business = models.CharField(max_length=1, choices=BUSINESS_CHOICES)
profit = models.DecimalField(max_digits=10, decimal_places=2)

def get_business_display(self):
    return dict(self.BUSINESS_CHOICES).get(self.business)


在这个方法中,我们通过self.BUSINESS_CHOICES获取到choices的取值,然后使用字典的get方法获取到对应的显示值。这样,无论是查询所有数据还是分类汇总,前端都可以通过get_business_display获取到正确的显示值。