هل تسلسل Querysets Django في حلقة الشيء الصحيح الذي يجب القيام به؟

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

  •  11-09-2019
  •  | 
  •  

سؤال

لدي نموذج Django يسمى المجموعة التي تمثل مجموعة من العناصر (CollectionItem). تحتوي كل مجموعة فقط على عناصر من نوع معين. (يحتوي CollectionItem على مفتاح أجنبي لجمع).

أريد أن أحصل على جميع التحصيلات الموجودة في القوائم العلمية ذات العلامة العامة لنوع معين وإرجاعها مرتبة حسب حقل معين. إليك رمز الاستعلام الذي أستخدمه:

lists = Collection.objects.filter(is_public=True, type=7)
items = CollectionItem.objects.none()
for list in lists:
    items |= CollectionItem.objects.filter(collection=list)
items = items.order_by('name')

يجب أن أتخيل أن هذا لن يطاق جيدا على الإطلاق عندما يكون لدي قاعدة بيانات كبيرة مع طن من القوائم والعناصر. هل هناك طريقة أفضل للقيام بذلك في Django؟ أو هو عدم الكفاءة المشاركة في حلقة الاستعلام ضئيلة بما يكفي مقارنة بالخيارات الأخرى التي يجب ألا تقلق كثيرا؟

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

المحلول

يبدو أنك بحاجة فقط:

items = CollectionItem.objects.filter(
                    collection__is_public=True, collection__type=7
               ).order_by('name')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top