我有一个像这样的数据库:
class MyCPU(models.Model):
cpu_name = models.CharField(max_length=100)
cpu_count = models.IntegerField()
class MyMachine(models.Model):
hostname = models.CharField(max_length=50)
ip = models.CharField(max_length=50)
cpu = models.ForeignKey(CPU, on_delete=models.CASCADE)
如何在Django中实现遵循原始SQL命令的结果?
select sum(cpu_count) as sum_cpu from my_machine inner join my_cpu on my_machine.cpu_id=my_cpu.id
我基本上想要总结所有机器中的CPU数量。
我已经尝试过这个解决方案,但它无法正常工作
Machine.objects.annotate(total_cpu=Sum('cpu__cpu_count'))
答案 0 :(得分:2)
由于您使用外键,您可以
MyMachine.objects.values('hostname', 'ip', 'cpu__cpu_count')
这将使每台机器获得多少cpu。
如果你需要cpu的总数
MyCPU.objects.aggregate(total_cpu=Sum('cpu_count'))['total_cpu']
如果有未连接的CPU对象,您可以执行以下步骤以从所有计算机获取总和,
MyMachine.objects.aggregate(total_cpu=Sum('cpu__cpu_count'))['total_cpu']
我认为最后一个是您正在搜索的,因为在不同的机器中可能存在相同的CPU对象。