如何在Django views.py中扩展模型的所有值实例

时间:2020-03-23 14:39:29

标签: django django-models django-views

嗨,大家好,我有一个问题要问。我有以下模型:

from djmoney.models.fields import MoneyField

class Totale_Vendite(models.Model):
    totale_vendite = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_dalle_vendite = models.CharField(max_length=100, editable=True)
    ricavi_01 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_02 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_03 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_04 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_05 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_06 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_07 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_08 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_09 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_10 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_11 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_12 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)

每个实例都使用djmoney应用来表示当月的收入。在我的views.py中,我想为每个实例(ricavi_01,ricavi_02)提取“金额”值(不是货币)。目前,我仅尝试了以下方法,即分别提取每个月的值:

def ricavi_dalle_vendite(request):
    queryset = Totale_Vendite.objects.all()
    labels = ['Gen','Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Ago', 'Set', 'Ott', 'Nov', 'Dic']
    data = []

    for entry in queryset:
        data.append(str(entry.ricavi_01.amount))
....

如何按照DRY原则解决呢???

1 个答案:

答案 0 :(得分:0)

如果您的目标是仅获取Totale_Vendite个字段金额(不含货币)的ricavi_01个条目的列表,则只需执行以下操作:

data = queryset.values_list('ricavi_01', flat=True)

这将产生十进制类型的项目列表。