2011-02-28 18 views
6

Tengo un modelo como este:¿Cómo puedo ordenar por un complejo de campo calculado en Django?

class Program(models.Model): 
    votes_sum = models.IntegerField(max_length=10, default=0) 
    voters_counter = models.IntegerField(max_length=10, default=0) 
    ... 

necesito los 10 programas mejor valorados, por lo que, lo he intentado en mi views.py:

best_rated = Program.objects.filter (Q (creator__profile__type = 'nosotros')) extra (seleccione = { 'total': 'votes_sum/voters_counter'}..) extra (order_by = [ 'total']) [10]

El problema es cuando ningún usuario ha votado, porque ocurre una división por cero.

No he podido encontrar otra manera de solucionar esto. ¿Alguna ayuda? Por favor.


Tengo una solución más simple de lo que pensaba. ¡Simplemente excluya los registros sin votos!

best_rated = Program.objects.filter (Q (creator__profile__type = 'nosotros') & ~ Q (voters_counter = 0)) extra (seleccione = { 'total': 'votes_sum/voters_counter'}).. Supletoria (order_by = [ 'total']) [10]

Respuesta

1

se podría tratar de hacer un bucle en su opinión de que sería algo así como:

if ZeroDivisionError: 
    total = 0 

esto es sólo un punto de partida, pero esperemos que ayude

editar: esto puede ser mejor

try: 
    total = votes_sum/voters_count 
except ZeroDivisionError: 
    total = 0 
return total 
Cuestiones relacionadas