我有以下情况
class MyModel(models.Model):
my_field = JSONField(null=True, blank=True)
my_field
是一个JSON字段,具有以下结构:
{
"name": "some name"
"id": "some hash id"
}
我想执行以下操作:
MyModel.objects.values(my_field__name)
这将等同于postgres查询:select my_field->>'name' from my_app_my_model
但我似乎无法让django生成有用的查询。
我得到的错误是:
FieldError: Cannot resolve keyword 'name' into field. Join on 'my_field' not permitted.
这里的主要目标是提供一个名为fields
的字符串列表,并运行以下命令:
MyModel.objects.values(*fields)
所以我认为原始的sql解决方案不适合这里。自定义查找适用于WHERE
条款,我不知道SELECT
子句的任何等效项。
有关如何做到这一点的任何想法?
谢谢!
答案 0 :(得分:4)
目前values
不支持json查找。您可以尝试使用extra。
MyModel.objects.extra(select={'name':"my_field->>'name'"}).values('name')
答案 1 :(得分:0)
请勿使用额外版本,因为django警告可能会弃用以下版本
改用RawSQL。
MyModel.objects.annotate(name=RawSQL("myfield->>'name'")).values('name').filter(<put your conditions here>)