سؤال

دعنا نقول أن لدي 'درجات' الجدول مع الحقول 'المستعمل','يسجل', 'SNESSEB', "SCOREC". وبعد في عرض المتصدرين، أحضر وأطلب الاستعلام عن طريق أي من حقول النتيجة التي يختارها الزائر. يثبت القالب على QuerySet. يتم تحديث الجدول بواسطة وظيفة في فترات منتظمة (أمر Django الذي أثاره Cron).

أريد أن أضيف 'مرتبة' الحقل إلى queryset بحيث سيكون لدي 'مرتبة', 'المستعمل', 'يسجل', 'SNESSEB', "SCOREC". وبعد علاوة على ذلك، أريد أن أبقى مستقلا عن قاعدة البيانات (Postgre هو خيار وفي الوقت المناسب لا يدعمه رقم الصف).

قد يكون الحل أنه يمكنني تعديل المهمة، بحيث يحسب أيضا ويكتب ثلاث صفوف مختلفة في ثلاثة حقول جديدة ("رانبا", "الرنانة", "رانز").

آمل أن يكون هناك حلا أفضل (كثير)؟

هل كانت مفيدة؟

المحلول

لماذا لا يمكنك حساب رتبة في القالب؟

{% for row in results_to_display %}
    <tr><td>{{forloop.counter}}</td><td>{{row.scorea}}</td>...
{% endfor %}

أو، يمكنك حساب المرتبة في وظيفة العرض.

def fetch_ranked_scores( request ):
    query = Score.objects.filter( ... ).orderby( scorea )
    scores = [ r, s.scorea for r, s in enumerate(query) ]
    return render_to_response ( template, { 'results_to_display':scores } )

أو، يمكنك حساب الترتيب في النموذج.

 class Score( models.Model ):
     ScoreA = models.IntegerField( ... )
     def ranked_by_a( self ):
         return enumerate( self.objects.filter(...).orderby( scorea ) )

أعتقد أن هناك الكثير، عدة طرق للقيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top