【发布时间】:2022-11-30 04:33:17
【问题描述】:
我的 python 项目中有一个 Django 模型,其中有一个元类详细说明了它的索引。我很好奇是否有办法使用 json 对象的嵌套路径创建索引。在这种情况下,我们知道 json 的结构,我想在特定元素上坚持使用 BTree 或哈希索引。
如果我只是将它作为原始 sql 运行,我希望只做类似的事情:
CREATE INDEX ON foster_data(root->'level_1'->'level_2'->>'name');
我希望我可以在我的模型中做这样的事情:
from django.db import models
from django.contrib.postgres import indexes
class ParentGuardians(Facilitators): # which extends models.Model
parent_identifier = models.IntegerField(db_column='p_id', default=None, blank=True,
null=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=['table_id', name='UniqueConstraint for Parents')
]
indexes = [
models.Index(fields=['p_id', ]),
indexes.BTreeIndex(fields=[models.JSONField('{"root": {"level_1": {"level_2": "name"}}}'), ]
, name="jsonb_p_id_idx"),
]
甚至:
...
indexes.BTreeIndex(fields=["root->'level_1'->'level_2'->>'name'", ]
...
但是命名字段fields 只需要字符串并且只希望它们是模型中定义的顶级字段。
我知道这个问题:Indexing JSONField in Django PostgreSQL 但它似乎更像是一个 hack 并且想要从代码库和 makemigrations 生成的结果,而不是手动编辑它。这可能是最近吗?
【问题讨论】:
标签: python django postgresql