Skip to main content
 首页 » 编程设计

python之Django order_by() 没有做正确的排序

2025年05月04日27oomusou

我在 Django 的 2 个地方设置了以下查询,唯一的限制是给我不同的结果

这是以下查询集的第一个结果

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

正确的结果应该是:

19,13,9 而不是 9,19,13 明白我的意思吗?

这是第二个查询集

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

这是结果

正确的结果应该是:

19,13,9,1 而不是 1,13,19,9 明白我的意思吗?

模型.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 

请您参考如下方法:

这是因为 puntos 是一个 charfield,所以它是按字典顺序排列的,所以 "9"> "19"。如果您想以数字方式对其进行排序,则需要一个整型字段或浮点型字段。

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