Django order_by() 没有正确排序
Posted
技术标签:
【中文标题】Django order_by() 没有正确排序【英文标题】:Django order_by() not doing proper ordering 【发布时间】:2014-06-23 00:21:09 【问题描述】:我在 Django 上的 2 个地方设置了以下查询,唯一的问题是限制并给了我不同的结果
这是以下 QuerySet 的第一个结果
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 明白我的意思吗?
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" >' % (self.avatar.thumbnail)
avatarEmpleado.allow_tags = True
def __unicode__(self):
return self.nombre
【问题讨论】:
你能告诉我们empleado
模型的定义吗?
我在 mysql 控制台上对 MySQL 进行了原始 SQL 查询,并给出了相同的结果,所以我认为它不是 Django Query 不好。因为这个查询给出了相同的结果 SELECT puntos, partidos FROM empresa_empleado WHERE empresa_id =1 ORDER BY puntos DESC;
【参考方案1】:
这是因为 puntos 是一个字符域,所以它按字典顺序排序,所以“9”>“19”。如果你想按数字排序,你需要一个整数域或浮点域。
我建议编辑模型,但如果你不能check out this solution
【讨论】:
你是 100% 正确的,它是固定的。在我添加这 2 个新字段之前,我已经 12 个小时不睡觉了 :) 谢谢,我很抱歉这个明显的问题 没问题@eddwinpaz,这件事一直发生在我身上:) 我有类似的问题,但我是按 pk 订购的,主键是一个字符域吗? 取决于你如何定义你的模型@Manza,打开一个新问题,我会尽力帮助你 @fasouto 谢谢我在模型类 Meta: ordering = ('-id',) 中添加了它,谢谢以上是关于Django order_by() 没有正确排序的主要内容,如果未能解决你的问题,请参考以下文章
Django order_by() 在 PythonAnywhere 上不适合我