هل هناك طريقة لإجراء استعلام احترام ترتيب المعلمات المدنبلة؟

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

سؤال

(واسمحوا لي أن أعرف ما إذا كان هذا سخيف تماما، ربما يكون ذلك السبب في أنني لم أجد أي شيء على هذا.)

هذه القصة لها نماذج Ranking و Artist, Ranking يرتبط بشكل عام ب Artist (Object_id، content_type ... shebang كله).

لدي قائمة بالأشياء التي تم إرجاعها Ranking.objects.values_list() أمر من قبل حقل معين (في حالتي score). من الواضح ذلك، إذا أردت عرض قائمة للفنانين الذين تم تصنيفهم، فأنا أريدهم بنفس الترتيب. لقد جربت طرق مختلفة، مثل .filter(pk__in=list), .in_bulk(list), ، إلخ. حاول إكراه نتيجة .values_list() في tuple أيضا.

انهم جميعا يأخذون قائمتي:

>>> objects = Ranking.objects.filter(<stuff>).order_by('score')
>>> objects_list = objects.values_list('object_id', flat=True)
>>> objects_list
[8, 1, 2, 15, 14, 3, 13, 31, 16, 5, 4, 7, 32, 9, 37]

وإعادته مثل ذلك:

>>> Artist.objects.filter(id__in=objects_list).values_list('id', flat=True)
[7, 32, 3, 8, 4, 2, 31, 9, 37, 13, 16, 1, 5, 15, 14]

(أنا فقط أعطي المعرفات في الحالة الثانية من أجل العقلية.)

الآن الطريقة الوحيدة التي يمكنني الحصول عليها من العمل هي إنشاء قائمة فارغة وحلقة من خلال غيرvalues_list() استفسار.

for item in objects:
    ranked_items.append(item.content_object)

هذا ينتج فقط n استفسارات، لذلك أتساءل عما إذا كانت هناك طريقة أفضل. كما هو موضح من خلال العلامات، أنا أستخدم postgresql.

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

المحلول

هذا ليس سبب django؛ قاعدة البيانات الخاصة بك هي إرجاعها في هذا الترتيب لأنه لا يتم تحديد أي طلب.

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