2014-05-06 59 views
0

我有2个地方的唯一的事情Django上设置以下查询的限制,并给了我不同的结果Django的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明白我的意思?

这里是第二查询集

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

我在MySQL控制台上对MySQL做了一个原始的SQL查询,并给出了相同的结果,所以我认为它不是Django查询是不好的。因为这个查询给出相同的结果 SELECT puntos,partidos FROM empresa_empleado WHERE empresa_id = 1 ORDER BY puntos DESC; – eddwinpaz

回答

8

这是因为puntos是charfield所以它的字典顺序排序,因此 “9”> “19”。如果你想以数字顺序排列,你需要一个整数场或浮点数。

我建议编辑模式,但如果你不能check out this solution

+0

你是100%正确,它是固定的。我有12个小时没有睡觉,然后我添加了这2个新的字段:)谢谢,我很抱歉的显而易见的问题 – eddwinpaz

+0

没问题@eddwinpaz,这件事发生在我身上:) – fasouto