我有一个Place模型:
class Place(models.Model):
... some not interesting fields
distances = models.JSONField()
在JSONField(距离)中存储类似:
的内容{
'1': 10
'2': 20
'3': 30
'4': 40
...
'1000': 10000
}
其中key是' id'一些位置模型,以及价值 - 在道路上的时间'从这个地方到这个位置
如果网站用户选择了位置,我会按照从最近到更远的位置显示地点到所选位置:
places = Place.objects.all().order_by(
RawSQL('distances->%s', (str(selected_location_id),))
)
除了表现外,一切都很酷。
但是,PostgreSQL支持JSONB字段的索引(将Django用于JSONField):
GIN , btree 和哈希
大帮忙!
答案 0 :(得分:1)
要为json中的特定键编制索引,请创建原始sql迁移:
运行./manage.py makemigrations --empty yourApp
,其中yourApp
是您要为其更改索引的模型的应用程序。
即编辑迁移
operations = [
migrations.RunSQL("CREATE INDEX idx_name ON your_table((json_field->>'json_key'));")
]
其中idx_name
是索引的名称,your_table
是您的表,json_field
是您的JSONField,在这种情况下,json_key
是您要索引的键
我不确定在django中是否有用于此类内容的本地包装程序,我看了也找不到,但是应该这样做。您可能需要说明一下,该索引也是通过此迁移在模型元中创建的。干杯!