Để lặp lại / mở rộng theo nhận xét của Jeff, điều tôi nghĩ bạn nên nhắm đến chỉ đơn giản là một tài sản trong lớp Lựa chọn của bạn để tính toán số phiếu bầu liên quan đến đối tượng đó:
class Choice(models.Model):
text = models.CharField(max_length=200)
def calculateVotes(self):
return Vote.objects.filter(choice=self).count()
votes = property(calculateVotes)
Và sau đó trong mẫu của bạn, bạn có thể làm:
{% for choice in choices %}
{{choice.choice}} - {{choice.votes}} <br />
{% endfor %}
Thẻ mẫu, IMHO hơi quá mức cho giải pháp này, nhưng nó cũng không phải là một giải pháp khủng khiếp. Mục tiêu của các mẫu trong Django là bảo vệ bạn khỏi mã trong các mẫu của bạn và ngược lại.
Tôi sẽ thử phương pháp trên và xem ORM tạo ra SQL nào vì tôi không chắc chắn về phía trên đầu của mình nếu nó sẽ lưu trước các thuộc tính và chỉ tạo một phần phụ cho thuộc tính hoặc nếu nó sẽ lặp lại / bật- nhu cầu chạy truy vấn để tính số phiếu. Nhưng nếu nó tạo ra các truy vấn tàn bạo, bạn luôn có thể điền vào tài sản trong chế độ xem của bạn với dữ liệu bạn tự thu thập.