Django 从json解析ORM查询

Django 从json解析ORM查询,django,python-2.7,orm,tastypie,django-orm,Django,Python 2.7,Orm,Tastypie,Django Orm,例如,我在tastypie中看到,可以通过来自客户机的json请求发送查询,而tastypie知道如何将它(我猜)转换为ORM查询并执行它 我想模仿这种能力,以便能够转换此json: { "foo__isnull": false, "name__in": "paul,george", "baz__fish": "blah", "limit": 6 } 变成 MyModel.objects.filter(foo__isnull=False, name__in=["paul", "

例如,我在tastypie中看到,可以通过来自客户机的json请求发送查询,而tastypie知道如何将它(我猜)转换为ORM查询并执行它

我想模仿这种能力,以便能够转换此json:

{
  "foo__isnull": false,
  "name__in": "paul,george",
  "baz__fish": "blah",
  "limit": 6
}
变成

MyModel.objects.filter(foo__isnull=False, name__in=["paul", "george"], ...)

如果没有完全使用tastypie的开销,是否可能?

您可以使用
**
传递查询:

query = json.loads(your_json_string)    
MyModel.objects.filter(**query)
如果您想知道如何将paul,george转换为列表,请执行以下操作:

query = json.loads(your_json_string)
query['name__in'] = query['name__in'].split(',')

别这么匆忙。注意“paul,george”不是python列表。此外,它还知道如何(除了示例之外)将字符串bool(例如“false”)解析为python false。我的目的是让您了解将
**
传递给
过滤器
函数的功能。Python json函数总是将
false
转换为
false
,您也可以将
paul,george
转换为一个简单的列表,因此我认为向下投票没有多大意义。尝试自己解析它,迭代和处理所有选项并不是我所期望的。我感谢您的帮助,也许最终会实现它,但我希望有一些预先制作的工具用于此。如果您的数据不符合预期的格式,并非所有内容都是预先制作的。程序员有责任对数据进行处理,以便将数据放入程序中。尤其是当您调用第三方api时,来自另一方的人没有责任适应您的约定,因此他们通常会自己制定自己的api。毕竟,如果没有人制作预先制作的工具,你是第一个,对吗?:)这不是“我的”惯例。正如我提到的,这是tastypie使用的格式。