سؤال

وأود أن العثور على كيفية تحديد كل الكائنات التي تحتوي على كائن آخر الحقل ManyToMany. لدي النماذج التالية (جردت أسفل)

class Category(models.Model):
    pass

class Picture(models.Model):
    categories = models.ManyToManyField(Category)
    visible = models.BooleanField()

وأحتاج إلى وظيفة لتحديد كافة الصور في واحدة أو أكثر من فئات:

def pics_in_cats(cat_ids=()):
    pass

ولكن لا بد من إرجاع مجموعة طلبات البحث إن أمكن حتى أستطيع أن أفعل شيئا مثل:

pics_in_cats((1,2,3)).filter(visible=True)

ويمكن أن يتم ذلك عن طريق تحميل كافة الكائنات الفئة ذات الصلة ودمج سمات picture_set، ولكن ذلك يبدو غير فعال. أود أيضا لتجنب الوقوع مرة أخرى إلى SQL الخام إذا أمكن ذلك.

وشكرا مقدما

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

المحلول

وماذا أكتب وظيفة مخصصة وعدم استخدام شيء من هذا القبيل؟ (غير مجربة)

pics = Picture.objects.filter(categories__in = [1,2,3]).filter(visible=True)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top