【发布时间】:2021-10-22 13:00:50
【问题描述】:
让我们来看看这个模型:
class Computer(models.Model):
name = models.CharField(max_length=100, null=False, blank=False)
cpu = models.PositiveIntegerField(null=False, blank=False)
ram = models.PositiveBigIntegerField(null=False, blank=False)
customer = models.ForeignKey(
Customer,
related_name='Computers',
on_delete=models.SET_NULL,
null=True,
blank=True
)
class Disk(models.Model):
computer = models.ForeignKey(
Computer,
related_name='Disks',
on_delete=models.CASCADE,
null=False,
blank=False
)
size = models.PositiveBigIntegerField(null=False, blank=False)
class Customer(models.Model):
name = models.CharField(max_length=255,
blank=True, null=True)
creation_date = models.DateTimeField(auto_now_add=True)
enabled = models.BooleanField(
blank=False, null=False, default=False)
我想按客户列出 CPU、RAM 和磁盘大小的总数(以及每个客户的计算机数量)。
类似这样的:
{'customer': ACME_Corp., 'cpu__sum': 72, 'ram__sum': 10737418240, 'computer__sum': 10, 'disks__sum': 10000000000000}
我尝试过类似的方法:
Computer.values('customer').annotate(Sum('cpu'), Sum('ram'), Sum('Disks__size'),computer__sum=Count('computer_id'))
问题是: 如果一台计算机有多个磁盘,我将添加他的 cpu(RAM 和计数)与他的磁盘数量一样多
例如,如果我们有 2 台计算机,每台计算机有 1 个 cpu,但其中一台连接了两个磁盘,则 cpu 总数不会是 2,而是 3...
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
每台电脑都至少有一个磁盘吗?
-
是的,每台电脑至少有一个磁盘!
标签: django postgresql django-models