2014-05-06 2 views
0

У меня есть следующий запрос установить на Django в 2 местах Единственное ограничение и дает мне разные результатыДжанго order_by() не делать в правильном порядке

Вот первый результат для следующих QuerySet

list_empleados = empleado.objects.filter(
    empresa=session_empresa 
).order_by('-puntos')[:3] 

enter image description here

правильный результат должен быть:

19,13,9 вместо 9,19,13 посмотреть, что я имею в виду?

Вот второй QuerySet

list_empleados = empleado.objects.filter(
    empresa=session_empresa 
).order_by('puntos') 

и вот результат

enter image description here

Правильный результат должен быть:

19,13,9,1 вместо 1 , 13,19,9 см., Что я имею в виду?

models.py

class empleado(models.Model): 


    empresa = models.ForeignKey(empresa) 
    nombre = models.CharField(max_length=50) 

    fecha_nacimiento = models.DateField(auto_now_add=False) 

    GENDER_CHOICES = (

     ('M', 'Masculino'), 
     ('F', 'Femenino'), 
    ) 

    sexo = models.CharField(max_length=1, choices=GENDER_CHOICES) 

    avatar = StdImageField(upload_to='avatar/%Y/%m/%d', variations={ 
     'large': (300, 300, True), 
     'medium': (50, 50, True), 
     'thumbnail': (98, 122, True)}) 

    correo = models.EmailField(max_length=100) 

    departamento = models.ForeignKey(departamento) 

    telefono = models.CharField(max_length=21) 
    direccion = models.CharField(max_length=200) 
    twitter = models.CharField(max_length=15) 
    usuario = models.CharField(max_length=15) 
    password = models.CharField(max_length=40) 
    primer_lugar = models.CharField(max_length=20) 
    segundo_lugar = models.CharField(max_length=20) 
    tercer_lugar = models.CharField(max_length=20) 
    goleador = models.CharField(max_length=20) 
    puntos = models.CharField(max_length=2, default=0) 
    partidos = models.CharField(max_length=4, default=0) 

    def avatarEmpleado(self): 
     return '<img src="/media/%s" height="90" width="90">' % (self.avatar.thumbnail) 

    avatarEmpleado.allow_tags = True 

    def __unicode__(self): 
     return self.nombre 
+0

Не могли бы вы показать нам определение 'empleado' модели? – piotrekw

+0

отредактировал вопрос – eddwinpaz

+0

Я сделал необработанный SQL-запрос на консоли MySQL в MySQL и дал те же результаты, поэтому я думаю, что это не Django Query, это плохо. потому что этот запрос дает те же результаты ВЫБОР Puntos, partidos ОТ empresa_empleado ГДЕ empresa_id = 1 ORDER BY Puntos DESC; – eddwinpaz

ответ

8

Это потому, что Puntos является CharField так это лексикографический заказа, так что "9"> "19". Если вы хотите заказать его численно, вам понадобится целое поле или floatfield.

Я хотел бы предложить, чтобы изменить модель, но если вы не можете check out this solution

+0

Вы на 100% прав исправлены. У меня 12 часов без сна, прежде чем я добавил это 2 новых поля :) спасибо, и я сожалею о очевидном вопросе – eddwinpaz

+0

Без проблем @eddwinpaz, все это случается со мной все время :) – fasouto

Смежные вопросы