来自内部联接的Django和

来自内部联接的Django和,django,sum,inner-join,Django,Sum,Inner Join,我有这样一个数据库: 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) c

我有这样一个数据库:

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'))

因为您使用的是外键,所以可以

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对象。

因为您使用的是外键,所以您可以这样做

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对象。

不工作意味着什么?有错误吗?我希望是一个整数,目的是计算所有机器的CPU数量之和。但它返回一个查询集,然后执行
queryset.values()
。然后,您将得到dict的结果。不过,连接的意义是什么?如果您想要一个值,为什么不
MyCPU.objects.aggregate(total\u cpu=Sum('cpu\u count'))
?我指的是所有机器中的cpu数量。我们需要选择机器和CPU表格都不工作的方式?有错误吗?我希望是一个整数,目的是计算所有机器的CPU数量之和。但它返回一个查询集,然后执行
queryset.values()
。然后,您将得到dict的结果。不过,连接的意义是什么?如果您想要一个值,为什么不
MyCPU.objects.aggregate(total\u cpu=Sum('cpu\u count'))
?我指的是所有机器中的cpu数量。我们需要选择机器表和CPU表,然后如何求和它们?不是通过写一个循环来更新答案,从而精确地获得cpu`SYE的总数。最后一个应该几乎正确。但是,它返回的结果与原始SQL略有不同。你能告诉我到底发生了什么,然后我们如何计算它们吗?不是通过写一个循环来更新答案,从而精确地获得cpu`SYE的总数。最后一个应该几乎正确。但是,它返回的结果与原始SQL略有不同。你能告诉我到底发生了什么事吗