我有一个名为“data”的jsonfield,其中一行包含以下内容,我正在试验QuerySet:
{
"id": "5cfbffb4-c03a-4905-aa3c-8ecd878f56d7",
"owner": "string",
"name": "some string",
"short-name": "some string",
"description": "some description",
"sub-identifier": [{
"sub_id": "d2610379-abcc-4201-ad89-5f3ad3a4b1c2",
"sub_name": "Test Dummy1",
"sub-short-name": "some further name",
"sub_description": "some description"
}, {
"sub_id": "7461b531-a181-483d-a554-ab8761c1d672",
"sub_name": "Test Dummy2",
"sub-short-name": "some further name",
"sub_description": "some description"
}]
}
所以我可以创建一个新的查询集
queryset = TestModel.objects.filter(data__name='some string')
这将正确返回查询集结果。但是,我注意到,如果dictionary键中有一个连字符,那么它会给我一个错误。下面返回一个语法错误:
queryset = TestModel.objects.filter(data__sub-identifier__sub_id__0='d2610379-abcc-4201-ad89-5f3ad3a4b1c2')
SyntaxError:表达式不能包含赋值,可能您的意思是“==”
有没有办法告诉Django接受可能带有连字符的键名?还是我必须确保在json数据中所有键都使用下划线
此外,我可以在子标识符内循环遍历列表中的每个元素,以测试子标识符中我要查找的数字。当然,我可以像上面那样使用0来实现这一点,但希望有一种方法可以在sub-identifer中循环遍历字典列表中的每个元素
谢谢
出现错误是因为(您自己可能知道)标识符中不允许使用连字符
-
。如何解决这个问题?我们有一个很好的功能,通过字典解包传递kwargs,所以你可以写下:接下来,由于要检查数组中的任何匹配项,因此可以使用^{} lookup [Django docs] :
试着改变这个
对此
并更新模型以使用适当的命名约定
请使用不带符号的名称,这些符号肯定会破坏ORM,甚至在SQL查询中也无法使用名称(
-
在SQL中是为替换运算符保留的,在python中也是如此)相关问题 更多 >
编程相关推荐