[python] نماذج Django - كيفية تصفية عدد من ForeignKey الكائنات



Answers

السؤال والإجابة المختارة من عام 2008 ومنذ ذلك الحين تم دمج هذه الوظيفة في إطار عمل django. نظرًا لأن هذه هي إحدى أفضل نتائج البحث في google عن "django filter key key" ، فأنا أود أن أضيف حلاً أسهل مع إصدار django حديث باستخدام Aggregation .

from django.db.models import Count
cats = A.objects.annotate(num_b=Count('b')).filter(num_b__lt=2)

في حالتي اضطررت إلى اتخاذ هذا المفهوم خطوة أخرى. يحتوي كائن "B" على حقل منطقي يسمى is_available ، وأردت فقط إرجاع كائنات تحتوي على أكثر من 0 كائنات B مع is_available مضبوطة على True.

A.objects.filter(B__is_available=True).annotate(num_b=Count('b')).filter(num_b__gt=0).order_by('-num_items')
Question

لديّ عارضتان ( A و ( B ، وهما على النحو التالي:

class A(models.Model):
  title = models.CharField(max_length=20)
  (...)

class B(models.Model):
  date = models.DateTimeField(auto_now_add=True)
  (...)
  a = models.ForeignKey(A)

الآن لدي بعض الكائنات A و B ، وأرغب في الحصول على استعلام يحدد جميع الكائنات التي تحتوي على أقل من 2 B تشير إليها.

A شيء مثل تجمع شيء ، والمستخدمين (B) الانضمام إلى تجمع. إذا كان هناك 1 أو 0 انضم فقط ، لا ينبغي عرض التجمع على الإطلاق.

هل من الممكن مع تصميم نموذج من هذا القبيل؟ أو ينبغي لي أن تعديل ذلك قليلا؟




أفترض أن الانضمام أو ترك المجمع قد لا يحدث في كثير من الأحيان كإدراج (إظهار) تجمعات. وأعتقد أيضا أنه سيكون أكثر كفاءة للمستخدمين الانضمام / ترك الإجراءات لتحديث حالة عرض تجمع. وبهذه الطريقة ، فإن إدراج التجمعات وعرضها سيتطلب وقتًا أقل ، حيث يمكنك فقط تشغيل استعلام واحد لـ SHOW_STATUS من كائنات التجمع.




Related