Django 1.9 JSONField order_by [英] Django 1.9 JSONField order_by
本文介绍了Django 1.9 JSONField order_by的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
class RatebookDataEntry(models.Model):
data = JSONField(blank = True,default = [])
last_update = models.DateTimeField(auto_now = True)
class Meta:
verbose_name_plural ='Ratebook data entries'
和数据字段包含此json:
{
annual_mileage:15000,
description:LEON DIESEL SPORT COUPE,
body_style Coupe,
range_name:LEON,
co2_gkm_max:122,
manufacturer_name:SEAT
}
我可以通过其中一个数据字段对查询集进行排序吗?此查询不起作用。
RatebookDataEntry.objects.all()。order_by(data__manufacturer_name)
解决方案
由于Julien提到在 JSONField
在Django中尚不支持。但是可以通过 RawSQL
使用 PostgreSQL函数jsonb 一>。在OP的情况下:
from django.db.models.expressions import RawSQL
RatebookDataEntry.objects.all()。 order_by(RawSQL(data->>%s,(manufacturer_name)))
I have the following django model that contains JSONField:
class RatebookDataEntry(models.Model):
data = JSONField(blank=True, default=[])
last_update = models.DateTimeField(auto_now=True)
class Meta:
verbose_name_plural = 'Ratebook data entries'
And data field contains this json:
{
"annual_mileage": 15000,
"description": "LEON DIESEL SPORT COUPE",
"body_style": "Coupe",
"range_name": "LEON",
"co2_gkm_max": 122,
"manufacturer_name": "SEAT"
}
Can I sort queryset by one of the data fields? This query doesn't work.
RatebookDataEntry.objects.all().order_by("data__manufacturer_name")
解决方案
As Julien mentioned ordering on JSONField
is not yet supported in Django. But it's possible via RawSQL
using PostgreSQL functions for jsonb. In OP's case:
from django.db.models.expressions import RawSQL
RatebookDataEntry.objects.all().order_by(RawSQL("data->>%s", ("manufacturer_name",)))
这篇关于Django 1.9 JSONField order_by的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文