a ECHO/se extienden sobre el comentario de Jeff, lo que creo que debe apuntar para es simplemente una propiedad en su mejor elección que calcula el número de votos asociados con ese objeto:
class Choice(models.Model):
text = models.CharField(max_length=200)
def calculateVotes(self):
return Vote.objects.filter(choice = self).count()
votes = property(calculateVotes)
Y luego en su plantilla , se puede hacer:
{% for choice in choices %}
{{choice.choice}} - {{choice.votes}} <br />
{% endfor %}
La etiqueta de plantilla, es mi humilde opinión un poco exagerado para esta solución, pero no es una solución terrible. El objetivo de las plantillas en Django es aislarlo del código en sus plantillas y viceversa.
Probaría el método anterior y vería qué SQL genera el ORM, ya que no estoy seguro de antemano si precacheará las propiedades y solo creará una subselección para la propiedad o si lo hará iterativamente/bajo demanda ejecutar la consulta para calcular el conteo de votos. Pero si genera consultas atroces, siempre puede completar la propiedad en su vista con los datos que ha recopilado usted mismo.
gracias @ John Ewart, su solución trabajaron para mí. Soy novato en django y python y no puedo encontrar la forma de obtener el sql que generó ORM. – Mohamed
Puede encontrar la respuesta a ese bit aquí: http://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django -es-running Es bastante simple, en realidad, y puede mostrarse en su plantilla, o registrarse con un recurso de registro, pero debe recordar activar DEBUG para que esto funcione. –
esta solución es perfecta para un problema que he tenido con plantillas django + modelos de motores de aplicaciones de google. Desearía poder votar dos veces. –