Aby echo/rozszerzyć na komentarzem Jeffa, co myślę, że należy dążyć do jest po prostu właściwością w klasie wyborem, który oblicza liczbę głosów związanych z tym obiektem:
class Choice(models.Model):
text = models.CharField(max_length=200)
def calculateVotes(self):
return Vote.objects.filter(choice = self).count()
votes = property(calculateVotes)
a potem w szablonie można zrobić:
{% for choice in choices %}
{{choice.choice}} - {{choice.votes}} <br />
{% endfor %}
tag szablon, to IMHO przesadą nieco do tego rozwiązania, ale to nie jest straszne rozwiązanie albo. Celem szablonów w Django jest odizolowanie od kodu w szablonach i na odwrót.
Chciałbym wypróbować powyższą metodę i zobaczyć, co generuje ORM SQL, ponieważ nie jestem pewien z góry mojej głowy, jeśli będzie wstępnie buforować właściwości i po prostu utworzyć podselekcji dla właściwości lub jeśli będzie iteracyjnie/na żądanie uruchom zapytanie, aby obliczyć liczbę głosów. Ale jeśli generuje okropne zapytania, zawsze możesz wypełnić właściwość w swoim widoku danymi, które sam zebrałeś.
dzięki @john Ewart, rozwiązanie pracował dla mnie. Jestem początkującym użytkownikiem Django i Pythona i nie mogę dowiedzieć się, jak uzyskać sql wygenerowany przez ORM. – Mohamed
Odpowiedź na to pytanie można znaleźć tutaj: http://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django -is-running Jest to całkiem proste i może być wyświetlane w twoim szablonie lub logowane za pomocą funkcji logowania, ale musisz pamiętać, aby włączyć DEBUG, aby to działało. –
to rozwiązanie jest idealne dla problemu, jaki miałem z modelami django templating + google app engine. Chciałbym móc dwa razy zagłosować. –