【发布时间】:2020-07-22 15:10:35
【问题描述】:
我有一个这样的模型:
class MyModel(models.Model):
details = models.JSONField()
# other fields
我想像这样注释这个模型的一些字段:
qs = MyModel.objects.filter(id__in=given_list).annotate(
first_name=F('details__first_name'),
last_name=F('details__last_name')
)
但是F() 表达式没有考虑 json 键,它只返回详细信息字段。
我使用的是 MySQL,所以不能使用KeyTextTransform。
我尝试像这样使用 RawSQL:
qs = MyModel.objects.filter(id__in=given_list).annotate(
first_name=RawSQL("(details->%s)", ('first_name',)),
last_name=RawSQL("(details->%s)", ('last_name',))
)
但它给出了这个错误:
MySQLdb._exceptions.OperationalError: (3143, 'Invalid JSON path expression. The error is around character position 1.')
那么我该怎么做才能让一切按预期进行呢?
【问题讨论】: