Saya memiliki daftar objek bagaimana saya dapat menjalankan kueri untuk memberikan nilai maksimal bidang:
Saya menggunakan kode ini:
def get_best_argument(self):
try:
arg = self.argument_set.order_by('-rating')[0].details
except IndexError:
return 'no posts'
return arg
peringkat adalah bilangan bulat
django
django-models
max
Johnd
sumber
sumber
Django juga mempunyai fungsi ' latest (field_name = None) ' yang menemukan entri terbaru (nilai maks.). Ini tidak hanya bekerja dengan bidang tanggal tetapi juga dengan string dan integer.
Anda bisa memberi nama field saat memanggil fungsi itu:
max_rated_entry = YourModel.objects.latest('rating') return max_rated_entry.details
Atau Anda sudah dapat memberikan nama bidang itu di meta data model Anda:
from django.db import models class YourModel(models.Model): #your class definition class Meta: get_latest_by = 'rating'
Sekarang Anda dapat memanggil 'latest ()' tanpa parameter apa pun:
max_rated_entry = YourModel.objects.latest() return max_rated_entry.details
sumber
latest()
. Jika Anda membutuhkan catatan dengan nilai minimum, Anda dapat menggunakanearliest()
.latest()
danearliest()
bekerja dengan bidang non-tanggal juga, tetapi ini merupakan efek samping dari penerapan. Anda harus menggunakan<your-queryset>.order_by('<interested-field>').first()
atau<your-queryset>.order_by('<interested-field>').last()
untuk memastikan kode anda akan tetap bekerja meskipun para pengembang Django akan mengubahlatest()
danearliest()
implementasi untuk bekerja dengan bidang tanggal saja.Saya telah menguji ini untuk proyek saya, ia menemukan maks / menit dalam waktu O (n):
from django.db.models import Max # Find the maximum value of the rating and then get the record with that rating. # Notice the double underscores in rating__max max_rating = App.objects.aggregate(Max('rating'))['rating__max'] return App.objects.get(rating=max_rating)
Ini dijamin membuat Anda mendapatkan salah satu elemen maksimum secara efisien, daripada menyortir seluruh tabel dan mendapatkan yang teratas (sekitar O (n * logn)).
sumber