সাধারণ জ্যাঙ্গো মডেলগুলি বিবেচনা করুন Event
এবং Participant
:
class Event(models.Model):
title = models.CharField(max_length=100)
class Participant(models.Model):
event = models.ForeignKey(Event, db_index=True)
is_paid = models.BooleanField(default=False, db_index=True)
অংশগ্রহণকারীদের মোট সংখ্যার সাথে ইভেন্টের ক্যোয়ারীটি বয়ান করা সহজ:
events = Event.objects.all().annotate(participants=models.Count('participant'))
ফিল্টারযুক্ত অংশগ্রহণকারীদের গণনার সাথে কীভাবে বেনিফিট করবেন is_paid=True
?
অংশগ্রহণকারীদের সংখ্যা নির্বিশেষে আমাকে সমস্ত ইভেন্টগুলি জিজ্ঞাসা করতে হবে , উদাহরণস্বরূপ এনটোটেড ফলাফলের মাধ্যমে ফিল্টার করার দরকার নেই। যদি 0
অংশগ্রহণকারীরা থাকে, তবে এটি ঠিক আছে, আমার কেবল 0
এনোটেটেড মান দরকার ।
নথিপত্র থেকে উদাহরণ এখানে কাজ করে না, কারণ এটি বাদ তাঁদের সঙ্গে টিকা পরিবর্তে কোয়েরি থেকে বস্তু 0
।
হালনাগাদ. জাজানো 1.8 এর নতুন শর্তাধীন এক্সপ্রেশন বৈশিষ্ট্য রয়েছে , তাই এখন আমরা এটির মতো করতে পারি:
events = Event.objects.all().annotate(paid_participants=models.Sum(
models.Case(
models.When(participant__is_paid=True, then=1),
default=0,
output_field=models.IntegerField()
)))
আপডেট 2. জাজানো 2.0 তে নতুন শর্তাধীন সমষ্টি বৈশিষ্ট্য রয়েছে, নীচে গৃহীত উত্তরটি দেখুন।
aggregate
ব্যবহার দেখানো হয়েছে। আপনি কি ইতিমধ্যে এ জাতীয় প্রশ্নগুলি পরীক্ষা করেছেন? (আমি নেই এবং আমি বিশ্বাস করতে চাই! :)