讲讲Django的数据排序

分类:开发相关    发布时间:2018-08-06 19:16:04
在Django应用中,如果希望根据某字段的值对检索结果排序,比如说,按字母顺序。 那么,使用 order_by() 这个方法就可以搞定了
具体方法:
Article.objects.all().order_by("-publish_date")   “publish_date"表示要进行排序的字段,连字符“-”在“publish_date”前表示降序排列。反之默认为升序。

Article.objects.all().order_by("-publish_date")[:5]  表示降序排列并只取前5位

如果我们想对文章的阅读数进行热门文章排序,按照上面的方法,得出的结果是:
Article.objects.all().order_by("-readnum")[:10]
+---------+
| readnum |
+---------+
| 9       |
| 8       |
| 7       |
| 6       |
| 55       |
| 4       |
| 3       |
| 2       |
| 111       |
| 10    |
很明显,我想要的结果应该是 111,55,10,9,8 这样的。但是这个111排在了最后,是按照字符串来排的。其实我是想把它当做数值来排。
我们手动转换类型:用下面的方法就可以搞定了
articlenum_list = models.Article.objects.extra(select={'t':'readnum+0'})
articlenum_list = articlenum_list.extra(order_by=["-t"])[:5]

如果需要以多个字段为标准进行排序(第二个字段会在第一个字段的值相同的情况下被使用到),使用多个参数就可以了,如下:
Article.objects.all().order_by("xxxxx", "xxx")

尽管很灵活,但是每次都要用 order_by() 显得有点啰嗦。 大多数时间你通常只会对某些字段进行排序。 在这种情况下,Django让你可以指定模型的缺省排序方式:
打开models.py设置参考如下:
class Article(models.Model):
    name = models.CharField(max_length=30)
    
    def __unicode__(self):
        return self.name

    **class Meta:**
        **ordering = ['name']**

标签: django python

阅读(679)┆ 评论(0) ┆ (0) ┆ 返回博客首页


发表我的评论

欢迎您: | 退出登录


文章评论