เพื่อสะท้อน / ขยายความคิดเห็นของเจฟฟ์สิ่งที่ฉันคิดว่าคุณควรตั้งเป้าหมายคือคุณสมบัติในคลาสตัวเลือกของคุณซึ่งคำนวณจำนวนคะแนนที่เกี่ยวข้องกับวัตถุนั้น:
class Choice(models.Model):
text = models.CharField(max_length=200)
def calculateVotes(self):
return Vote.objects.filter(choice=self).count()
votes = property(calculateVotes)
จากนั้นในเทมเพลตของคุณคุณสามารถ:
{% for choice in choices %}
{{choice.choice}} - {{choice.votes}} <br />
{% endfor %}
เทมเพลตแท็กคือ IMHO มากเกินไปสำหรับการแก้ปัญหานี้ แต่ก็ไม่ใช่วิธีการแก้ปัญหาที่เลวร้ายเช่นกัน เป้าหมายของเทมเพลตใน Django คือการป้องกันคุณจากโค้ดในเทมเพลตและในทางกลับกัน
ฉันจะลองวิธีข้างต้นและดูว่า SQL ORM สร้างขึ้นมาเพราะฉันไม่แน่ใจว่าอยู่ด้านบนของหัวถ้ามันจะแคชคุณสมบัติล่วงหน้าและเพียงสร้างการเลือกย่อยสำหรับคุณสมบัติหรือถ้ามันจะซ้ำ / on- ความต้องการใช้งานแบบสอบถามเพื่อคำนวณการนับคะแนน แต่ถ้ามันสร้างการสืบค้นที่หยาบคายคุณสามารถเติมคุณสมบัติในมุมมองของคุณด้วยข้อมูลที่คุณรวบรวมเองได้เสมอ