我们首先看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链接哦