คำถามติดแท็ก django-aggregation

5
วิธีกรองวัตถุเพื่อนับคำอธิบายประกอบใน Django
ลองพิจารณาโมเดล Django แบบง่ายๆ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คำอธิบายประกอบ เช่นจากเอกสารไม่ได้ทำงานที่นี่เพราะมันไม่รวมวัตถุจากแบบสอบถามแทน annotating 0พวกเขาด้วย ปรับปรุง Django 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. Django 2.0 มีคุณสมบัติการรวมเงื่อนไขใหม่ดูคำตอบที่ยอมรับด้านล่าง

8
Django: จัดกลุ่มตามวันที่ (วันเดือนปี)
ฉันมีโมเดลง่ายๆดังนี้: class Order(models.Model): created = model.DateTimeField(auto_now_add=True) total = models.IntegerField() # monetary value และฉันต้องการแสดงการแยกย่อยแบบเดือนต่อเดือนของ: ในหนึ่งเดือนมียอดขายเท่าใด ( COUNT) มูลค่ารวม ( SUM) ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการโจมตีนี้คืออะไร ฉันเคยเห็นข้อความค้นหาพิเศษที่ดูค่อนข้างน่ากลัว แต่ความคิดง่ายๆของฉันกำลังบอกฉันว่าฉันอาจจะดีกว่าแค่การวนซ้ำตัวเลขโดยเริ่มจากปี / เดือนเริ่มต้นโดยพลการและนับไปเรื่อย ๆ จนกว่าฉันจะถึงเดือนปัจจุบันทิ้งง่ายๆ การกรองคำค้นหาสำหรับเดือนนั้น งานฐานข้อมูลมากขึ้น - ความเครียดของนักพัฒนาน้อยลง! อะไรที่เหมาะสมกับคุณที่สุด มีวิธีที่ดีที่ฉันสามารถดึงตารางข้อมูลด่วนกลับมาได้หรือไม่? หรือวิธีสกปรกของฉันอาจเป็นความคิดที่ดีที่สุด? ฉันใช้ Django 1.3 ไม่แน่ใจว่าพวกเขาได้เพิ่มวิธีที่ดีกว่าGROUP_BYเมื่อเร็ว ๆ นี้หรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.