سؤال

مرحبا (آسف لغتي الإنجليزية السيئة: ص)

تخيل هذه النماذج:

class Fruit(models.Model):
    # ...

class Basket(models.Model):
    fruits = models.ManyToManyField(Fruit)

الآن أود استرداد مثيلات سلة ذات صلة الكل الفاكهة. المشكلة هي أن رمز رفع الصوت عرجاء إرجاع حالات سلة ذات صلة أي الفاكهة :

baskets = Basket.objects.filter(fruits__in=Fruit.objects.all())

# This doesn't work:
baskets = Basket.objects.filter(fruits=Fruit.objects.all())

أي حل يحل هذه المشكلة؟

شكرا جزيلا. :)

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

المحلول

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

Basket.objects.annotate(num_fruits=Count('fruits')).filter(num_fruits=len(Fruit.objects.all()))

يبحث كل كائن كل سلة مع عدد الفواكه المرتبطة بهذه السلال التي لها عدد من الفاكهة تساوي إجمالي كمية الفواكه.

ملاحظة: تحتاج إلى Django 1.1 لهذا العمل.

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