django - django模型找到过滤器计数最小的地方
问题描述
嗨,我有一个模型,我将 ip 保存在四列中:
class IPAbstract(Audit):
first = models.PositiveSmallIntegerField(validators=[MinValueValidator(1), MaxValueValidator(254)])
second = models.PositiveSmallIntegerField(validators=[MinValueValidator(0), MaxValueValidator(254)])
third = models.PositiveSmallIntegerField(validators=[MinValueValidator(0), MaxValueValidator(254)])
forth = models.PositiveSmallIntegerField(validators=[MinValueValidator(0), MaxValueValidator(254)])
class Meta:
abstract = True
我所有的 ips 都以 10.0.0.0,20.0.0.0,30.0.0.0,40.0.0.0 开头我想找到我的 ip 范围的最小行数,我可以这样做:
IPAbstract.objects.filter(first=10).count()
IPAbstract.objects.filter(first=20).count()
IPAbstract.objects.filter(first=30).count()
IPAbstract.objects.filter(first=40).count()
并将它们相互比较以找出哪些行数最少。我想看看是否有其他方法可以找到我的答案?
解决方案
您可以使用:
from django.db.models import Count
IPAbstract.objects.values('first').annotate(
count=Count('pk')
).order_by('number')
这将生成一个QuerySet
看起来像这样的字典:
<QuerySet [
{ 'first': 30, 'count': 5 },
{ 'first': 10, 'count': 9 },
{ 'first': 40, 'count': 11 },
{ 'first': 20, 'count': 20 },
]>
first
没有出现在记录中的值IPAbstract
当然不会被列出。
因此,您可以获得具有最小值的字典'count'
:
from django.db.models import Count
IPAbstract.objects.values('first').annotate(
count=Count('pk')
).order_by('first', 'number').first()
推荐阅读
- json - 类型错误:在 reactjs 中使用 fetch 读取 json 时未定义项目
- python - 如何在 VSCode 中整体执行 python 函数(它拆分并将第一行发送到解释器)
- pycharm - PyCharm:在“运行”中出现异常后显示局部变量
- mysql - 计算左联合表中的非空值
- mysql - 从 MySQL 数据库中对行的 API 删除调用不起作用
- c++ - 隐式转换为动态分配数组的 const
- javascript - Javascript将另一个参数插入函数
- r - 如何估计 R 中的 Quantile-on-Quantile 回归?
- c# - 如何使匿名类仅使用 std 实现接口?
- android - Google 开发人员无法为 Google 登录创建 OAuth 客户端