sql—如何向原始模型的列添加注解和

pn9klfpd  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(285)

示例模型:

class Cluster(models.Model):
    index = models.BigIntegerField(blank=True, null=True)
    cluster_id = models.BigIntegerField(blank=True, null=True)
    module_count = models.BigIntegerField(blank=True, null=True)

我知道我可以得到django模型的groupby和:

cluster_id | module_count 
    -------------------------
    1          | 1
    1          | 2
    2          | 3
    2          | 1

    sum_mods = clusters.values('cluster_id').annotate(data_sum=Sum('module_count'))

    cluster_id | module_count 
    -------------------------
    1          | 3
    2          | 4

这将为我提供按群集id分组的每组数据的总和。
如何将此总和分配到原始模型中的列中?例如:

cluster_id | module_count | data_sum 
    ----------------------------------------
    1          | 1            |3
    1          | 2            |3
    2          | 3            |4
    2          | 1            |4
dffbzjpn

dffbzjpn1#

试试这个

clusters.values('cluster_id').update(data_sum=Sum('module_count'))
pbgvytdp

pbgvytdp2#

pk_list = list(set(Cluster.objects.all().values_list('cluster_id', flat=True)))

# return list of all unique cluster_id

for pk in pk_list:
    #get all cluster with this id
    lst = Cluster.objects.filter(cluster_id=pk)

    #get sum of all module_count
    sum_col = lst.aggregate(sum_col=Sum('module_count'))['sum_col']

    #update  all cluster with sum_col
    lst.update(module_count=sum_col)

相关问题