Django: مرشح QuerySet ل * جميع القيم * من manytomanyfield
-
12-09-2019 - |
سؤال
مرحبا (آسف لغتي الإنجليزية السيئة: ص)
تخيل هذه النماذج:
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 لهذا العمل.
لا تنتمي إلى StackOverflow