相关疑难解决方法(0)

Django - order_by() 字符和数字

我必须对包含主机名的对象列表进行排序。

主机名采用以下格式:h1, h5, h10, h12, h12-abc, h1000, x10

如果我使用 order_by('hostname') 它将像这样排序:

h1, h10, h1000, h12, h12-abc, h5, x10
Run Code Online (Sandbox Code Playgroud)

我将如何实现这样的排序:

h1, h5, h10, h12, h12-abc, h1000, x10
Run Code Online (Sandbox Code Playgroud)

主机名始终以字符开头,然后是 1-4 位数字和部分扩展名,例如“-abc”。

我想我必须使用 Substr() 来提取数字并以某种方式对数字进行排序,“10”不会列在“5”之前。

通过搜索,我发现了一些带有 extra() 的旧示例,但 Django 文档说它将在未来被弃用,并且“使用此方法作为最后的手段” https://docs.djangoproject.com/en/2.1/ref/models /查询集/#extra

面向未来的方法是什么?

django postgresql django-queryset

3
推荐指数
1
解决办法
1880
查看次数

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

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

这是以下QuerySet的第一个结果

list_empleados = empleado.objects.filter(
    empresa=session_empresa
).order_by('-puntos')[:3]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

正确的结果应该是:

19,13,9而不是9,19,13看到我的意思?

这是第二个QuerySet

list_empleados = empleado.objects.filter(
    empresa=session_empresa
).order_by('puntos')
Run Code Online (Sandbox Code Playgroud)

这是结果

在此输入图像描述

正确的结果应该是:

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 …
Run Code Online (Sandbox Code Playgroud)

python django django-custom-tags

1
推荐指数
1
解决办法
1625
查看次数