こんにちは、私は4列に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
私のすべてのIPは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()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加