في جانغو, كيف يمكنني فرز نموذج على حقل ومن ثم الحصول على آخر البند ؟

StackOverflow https://stackoverflow.com/questions/252242

سؤال

على وجه التحديد, لقد نموذج يحتوي على حقل مثل هذا

pub_date = models.DateField("date published")

كنت تريد أن تكون قادرة على بسهولة انتزاع الكائن مع أحدث pub_date.ما هي أسهل/أفضل طريقة للقيام بذلك ؟

سيكون شيئا مثل التالية أفعل ما أريد ؟

Edition.objects.order_by('pub_date')[:-1]
هل كانت مفيدة؟

المحلول

obj = Edition.objects.latest('pub_date')

يمكنك أيضا تبسيط الأمور من خلال وضع get_latest_by في نموذج ميتا, ثم عليك أن تكون قادرة على القيام

obj = Edition.objects.latest()

انظر مستندات للحصول على مزيد من المعلومات.وربما كنت سوف تحتاج أيضا إلى تعيين ordering الخيار الفوقية.

نصائح أخرى

والجواب هارلي هو الطريق للذهاب لهذه القضية حيث تريد آخر وفقا لبعض المعايير ترتيب لنماذج معينة، كما تفعل، ولكن الحل العام هو عكس ترتيب واسترداد البند الأول:

Edition.objects.order_by('-pub_date')[0]

ملاحظة:

عادي الثعبان قوائم قبول المؤشرات السلبية التي تدل على إزاحة من نهاية القائمة بدلا من بداية مثل عدد موجب.ومع ذلك ، QuerySet الكائنات رفع

AssertionError: Negative indexing is not supported.
إذا كنت تستخدم مؤشر سلبي, وهذا هو السبب عليك أن تفعل ما insin قال:عكس ترتيب والاستيلاء على 0th العنصر.

كن حذرا من استخدام

Edition.objects.order_by('-pub_date')[0]

وكما كنت قد فهرسة لمجموعة طلبات البحث فارغة. لست متأكدا ما هو النهج الصحيح Pythonic، ولكن أبسط يكون لاتمامه في إذا / آخر أو محاولة / صيد:

try:
    last = Edition.objects.order_by('-pub_date')[0]
except IndexError:
    # Didn't find anything...

ولكن، كما قالHarley، عندما كنت أمر من التاريخ، latest() هو السبيل <م> djangonic للقيام بذلك.

scroll top