我们首先看django的模型类

class RatebookDataEntry(models.Model):
    data = JSONField(blank=True, default=[])
    last_update = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name_plural = 'Ratebook data entries'

data字段包含

{
    "annual_mileage": 15000, 
    "description": "LEON DIESEL SPORT COUPE", 
    "body_style": "Coupe", 
    "range_name": "LEON", 
    "co2_gkm_max": 122, 
    "manufacturer_name": "SEAT"
}

我们向对此字段的annual_mileage进行排序,我们看下sql语句是如何做的(我们采用的数据库是pg postgresql)
排序

SELECT *,ext->'$.maxNum' AS maxNum FROM prop_info WHERE 1=1 ORDER BY maxNum DESC

可以使用KeyTextTransform 进行查询

from django.contrib.postgres.fields.jsonb import KeyTextTransform

qs = RatebookEntry.objects.all()
qs = qs.annotate(annual=KeyTextTransform('annual_mileage', 'data'))
qs = qs.order_by('annual')
# or...
qs = qs.order_by('-annual')

我们看到我们是将字段进行重命名了,所以直接按照排序就好,我使用的是2.0版本的annotate最好是 重命名一下否则会报出error

此博客是我在开发过程中遇到了这样的问题找了很多的相关网站,最后在stackoverflow一条评论中找到的
https://stackoverflow.com/questions/36641759/django-1-9-jsonfield-order-by
转发必须附带本文链接和stackoverflow链接哦

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐