Python Django中相关字段的筛选

Python Django中相关字段的筛选,python,django,postgresql,django-models,Python,Django,Postgresql,Django Models,我的Django项目中有两个模型: ModelA(models.Model): name = models.CharField(max_length=20) ModelB(models.Model): a = models.ForeignKey(A, on_delete=models.CASCADE) date = models.DateField() 模型a和模型B之间存在一对多关系,大约有50个模型a实例和100000个模型B条目。在我遇到的问题中,我有一个特定的

我的Django项目中有两个模型:

ModelA(models.Model):
    name = models.CharField(max_length=20)

ModelB(models.Model):
    a = models.ForeignKey(A, on_delete=models.CASCADE)
    date = models.DateField()
模型a和模型B之间存在一对多关系,大约有50个模型a实例和100000个模型B条目。在我遇到的问题中,我有一个特定的模型B查询集,从这个查询集中我想知道,对于每个日期,这些模型B是如何在不同的模型a之间分布的。我需要的数据结构如下:

[
    { 
        "date": date_1,
        "num": num_1,
        "bins": [ 
                    { "name_A": model_A_1, "num": num_A_1_1 },
                    { "name_A": model_A_2, "num": num_A_1_2 }
                ]
    },
    { 
        "date": date_2,
        "num": num_2,
        "bins": [ 
                    { "name_A": model_A_1, "num": num_A_2_1 },
                    { "name_A": model_A_2, "num": num_A_2_2 }
                ]
    }
]
其中,
date\u 1
是表B中的现有日期之一,
num\u 1
是日期为
date\u 1
的模型B的总数
bins
包含ModelB在不同ModelA之间的分布,例如,
num_A_1_1
对应于带有日期
date_1
和外键
model_A_1
的ModelB数量

以下是我尝试过的:

## Get all dates in initial queryset
date_bins = initial_modelB_queryset.values("date").order_by("date").distinct()
output = []

for bin in date_bins:
    B_A_queryset = ModelA.objects.filter(modelB__in=initial_modelB_queryset, modelB__date=bin["date"])
    B_num = B_A_queryset.count()
    bins = B_A_queryset.annotate(name_A=F("name"), num=Count("modelB", filter=Q(modelB__in=initial_modelB_queryset))).values("name_A", "num")
    output.append({"date": bin["date"], "num": B_num, "bins": bins})
注意
initial\u modelbu queryset
是预先指定的modelB的初始查询集。我非常肯定有更好的解决方案,因为当前的实现相当缓慢