Để vang/mở rộng khi bình luận của Jeff, những gì tôi nghĩ rằng bạn nên đặt mục tiêu cho chỉ đơn giản là một tài sản trong lớp Choice của bạn cho phép tính số phiếu biểu quyết 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, là IMHO quá mức cần thiết cho giải pháp này, nhưng nó cũng không phải là giải pháp khủng khiếp. Mục tiêu của các mẫu trong Django là cách ly 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 SQL mà ORM tạo ra vì tôi không chắc chắn trên đầu của tôi nếu nó sẽ lưu trước các thuộc tính và chỉ tạo một subselect cho thuộc tính hoặc nếu nó sẽ lặp lại/theo yêu cầu chạy truy vấn để tính số phiếu bầu. Nhưng nếu nó tạo ra các truy vấn khắc nghiệt, bạn luôn có thể điền thuộc tính trong chế độ xem của mình với dữ liệu bạn đã tự thu thập.
Nguồn
2009-08-14 04:07:47
nhờ @ John Ewart, giải pháp của bạn làm việc cho tôi. Tôi newbie để django và python và không thể hình dung làm thế nào để có được sql mà ORM tạo ra. – Mohamed
Bạn có thể tìm câu trả lời cho bit đó ở đây: http://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django -is-running Nó khá đơn giản, thực sự và có thể được hiển thị trong mẫu của bạn, hoặc đăng nhập với một cơ sở khai thác gỗ, nhưng bạn phải nhớ bật DEBUG để làm việc này. –
giải pháp này là hoàn hảo cho một vấn đề tôi đã có với django templating + google mô hình ứng dụng động cơ. Tôi ước tôi có thể bầu bạn hai lần. –