كيفية الترتيب حسب القيمة المحسوبة في django
-
06-09-2019 - |
سؤال
مرحبا، أريد فرز الكائنات بناء على قيمة محسوبة في Django ... كيف أفعل ذلك؟
فيما يلي نموذج ملف تعريف المستخدم على ذلك بناء على تجاوز سعة مكدس يفسر مأزق:
class Profile(models.Model):
user = models.ForeignKey(User)
def get_reputation():
...
return reputation
reputation = property(get_reputation)
لذلك، أقول أريد فرز المستخدمين حسب السمعة. كيف يمكنني فعل ذلك؟ أعلم أنك لا تستطيع القيام بذلك فقط:
Profile.objects.order_by("-reputation")
شكرا لمساعدتك الجميع :)
المحلول
إذا كنت بحاجة إلى القيام بالفرز في قاعدة البيانات (نظرا لأن لديك الكثير من السجلات، وتحتاج إلى مثل المخفف منها)، فإن الخيار الحقيقي الوحيد هو تحويل السمعة إلى حقل ضعيف (على سبيل المثال تحديثه في عملية تجاوز save()
طريقة على النموذج).
نصائح أخرى
نظرا لأن رمز الحساب الخاص بك موجود فقط داخل Python، فعليك إجراء الفرز في Python أيضا:
sorted (Profile.objects.all (), key = lambda p: p.reputation)
اعتبارا من django-1.8، فمن الممكن فرز queryset باستخدام تعبيرات الاستعلام طالما يمكن تقديم القيمة المحسوبة في SQL. تستطيع ايضا استخذام annotations
إلى النموذج كما order_by
مصطلح.
from django.db.models import F
Profile.objects.annotate(reputation=(F('<field>') + ...)).order_by("-reputation")
العمليات الأساسية مثل +
, -
, *
, /
و **
يمكن استخدامها مع F()
. وبعد بالإضافة إلى هناك العديد من الوظائف الأخرى مثل Count
, Avg
, Max
, ...
الروابط:
- التجميع -
order_by
- إجراء استفسارات - يمكن أن المرشحات الحقول المرجعية على نموذج
- تعبيرات الاستعلام - بنيت في التعبيرات
انظر أيضا هذا حتى سؤال وجواب: طلب استعلام عن طريق قيمة الحقل الإجمالية