我有一个仪表板模型,是由一个预定的工作填充的.

dashboard model

class dashboard(models.Model):
    topvul1=models.IntegerField(default=0)
    topvul2=models.IntegerField(default=0)
    topvul3=models.IntegerField(default=0)

我想展示clientvul模型中找到最多的VID个,第二多找到的和第三多找到的VID个.每天给我的dashboard型号加一次油.

clientvul model

class clientvul(models.Model):
    
    client= models.ForeignKey(client, on_delete=models.CASCADE)
    vid=models.ForeignKey(vul, on_delete=models.CASCADE)
    path=models.CharField(max_length=1000)
    product=models.CharField(max_length=1000)
    isactive=models.BooleanField(default=True)
    class Meta:
        constraints = [
            models.UniqueConstraint(
               fields=['client', 'VID'], name='unique_migration_host_combination' # legt client und VID als Primarykey fest
            )
        ]

推荐答案

您可以 for each vul计算clientvul的数量,然后订购并退回前三个:

from django.db.models import Count

vul.objects.alias(
    num_client=Count('clientvul_set')
).order_by('-num_client')[:3]

没有必要为此建立模型.除非我们讨论的是数十亿条记录,否则这样的查询以毫秒为单位运行,而且更健壮,因为它还会更改顺序,例如,如果删除clientvul的话.

Django相关问答推荐

通过 B 的外键列表访问模型 B 的行

错误``Forbidden (403) CSRF 验证失败.请求中止.``` 当try 登录管理员时

使用 Crispy Forms 时 Django 返回 'TemplateDoesNotExist'

如何在没有此前缀的情况下修复此 django 路径?

Django 模型 Select - 只允许管理界面上的特定转换

data._mutable= 在 Django REST 框架中为真

Django 相当于 COUNT 和 GROUP BY

Django REST 异常

使用 Python / Django 的 Google API 示例的 Oauth

如何使用 SQL 的IN等字段上的数组过滤 django 查询集?

Django查询在哪里

Django:如何编写查询以使用多列进行排序,通过模板显示

Django:如何过滤属于特定组的用户

Django 应用程序中的版本号

升级到 Django 1.8 后提供的固定默认值

在 Django shell 启动时自动导入模型

Django unique_together 与可为空的 ForeignKey

显式 cursor.close() 的必要性

Django 测试 - 在所有测试中修补对象

左加入 Django ORM