Python 如何使用Django ORM中的group by获取列表和group by中的所有值,如果特定年份没有值,则将0放入列表中?

Python 如何使用Django ORM中的group by获取列表和group by中的所有值,如果特定年份没有值,则将0放入列表中?,python,django,django-orm,Python,Django,Django Orm,我有两个模型。一个是带有分行id和分行名称字段的分行,另一个是带有销售金额和年份字段的销售。分公司与销售部之间存在着外键关系。一个分支可以有多个销售。我试图做到的是按年度分组,每年都有其销售价值。并获取键(分支名称)和值(sales_list)的字典。如果该年没有销售,则应该有值“0” models.py import datetime from django.db import models class Branch(models.Model): branch_id = mode

我有两个模型。一个是带有分行id和分行名称字段的分行,另一个是带有销售金额和年份字段的销售。分公司与销售部之间存在着外键关系。一个分支可以有多个销售。我试图做到的是按年度分组,每年都有其销售价值。并获取键(分支名称)和值(sales_list)的字典。如果该年没有销售,则应该有值“0”

models.py

import datetime
from django.db import models


class Branch(models.Model):

    branch_id = models.IntegerField()
    name = models.CharField(max_length=50)


    def __str__(self):
        return self.name

class Sales(models.Model):
    branch = models.ForeignKey('Branch', on_delete = models.CASCADE)
    sales_amount = models.IntegerField()
    year = models.CharField(max_length=4) 

    class Meta:
        unique_together = (('year', 'branch'),)

    def __str__(self):
        return self.branch.name
views.py

from django.shortcuts import render
import json


from .models import Branch, Sales


def index(request):
    branches = Branch.objects.all()
    sales = Sales.objects.all()

    sales_list = []
    branch_list = []
    year_set = set()

    for sale in sales:
        year_set.add(sale.year)

    year_list = list(sorted(year_set))

    for branch in branches:
        sales_list.append(branch.sales_set.all().order_by('year'))
        branch_list.append(branch.name)

    sales_list = [[j.sales_amount for j in i] for i in sales_list]

    branch_dict = dict(zip(branch_list, sales_list))

    return render(request, 'index.html', {
        'year_list': year_list,
        'branch_dict': branch_dict
    })


我已经

2011年的BRANCH001销售额为5000,2012年的BRANCH001销售额为10000,
BRANCH002在2011年的销量为7000辆

预期输出={'BRANCH001':[500010000],'BRANCH002':[07000]}


实际输出={'BRANCH001':[5000,10000],'BRANCH002':[7000]}

如果要为数据库(而不是Python)中缺少的数据创建0值,则需要在数据库中创建一个。如果要为数据库(而不是Python)中缺少的数据创建0值,则需要在数据库中创建一个。