2014-05-06 61 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