Django按多个字段排序

时间:2020-08-05 14:05:18

标签: django orm sql-order-by

我在Django订购中遇到了一个奇怪的问题。由于某些原因,我无法按多个字段订购列表视图。

这是我的课程。

class Syslog(models.Model):

    receivedat = models.DateTimeField(default=timezone.now)
    facility = models.PositiveSmallIntegerField()
    priority = models.PositiveSmallIntegerField()
    fromHost = models.CharField(max_length=50)
    message = models.TextField(max_length=500)

    class Meta:
           ordering = ['id','receivedat', 'fromHost']

这也是我的视图类:

class HomePageView(ListView):
    model = Syslog
    template_name = 'home.html'
    context_object_name = 'all_logs'
    paginate_by = 10
    ordering = ['-id', 'receivedat', 'fromHost']

如果指定了ordering中的单个字段(例如ordering = ['-id']),但是当我添加第二个或第三个参数时,所有内容都恢复为默认值(仅顺序的第一个字段被识别)< / p>

有人遇到类似的问题吗?

同样的问题仍然存在于Django shell中。当我执行以下查询Syslog.objects.all().order_by('id')时,一切看起来都不错,但是当我向order_by添加另一个字段(例如Syslog.objects.all().order_by('id','fromHost'))时,第二个字段根本无法识别。

关于, 乔丹

2 个答案:

答案 0 :(得分:2)

对此的了解-> Syslog.objects.all().order_by('id','fromHost')

使用此-> Syslog.objects.order_by('id','fromHost')

删除.all()

答案 1 :(得分:0)

在解决我的问题后,我想出了为什么我没有得到我期望的结果。问题是我的开发数据集非常相似,并且由于对象的相似性,其排序更改未反映在模板上。