如何使用string作为关键字参数?
具体来说,我试图使用一个string来任意过滤ORM。 我已经尝试了exec和eval解决scheme,但是我正在碰壁。 下面的代码不起作用,但这是我知道如何解释我想去的地方的最佳方式
from gblocks.models import Image f = 'image__endswith="jpg"' # Would be scripted in another area, but passed as text <user input> d = Image.objects.filter(f) #for the non-django pythonistas: d = Image.objects.filter(image__endswith="jpg") # would be the non-dynamic equivalent.
d = Image.objects.filter(**{'image__endswith': "jpg"})
eval
选项应该可以正常工作,只要将它包装在整个expression式中,而不仅仅是f
:
f = 'image__endswith="jpg"' d = eval('Image.objects.filter(' + f + ')')
您需要将关键字的值分开,然后使用关键字作为关键字设置字典,并将值设置为值。 然后,您可以使用字典的双星号函数参数。
所以…
keyword, sep, value = f.partition('=') kwargs = {keyword: value.strip('"')} d = Image.objects.filter(**kwargs)
请注意,此代码假定关键字中不会有任何等号“=”(它们只用于将关键字与值分开),并将值用引号括起来。
- Django筛选查询集__in列表中的* every *项
- 什么时候应该使用ugettext_lazy?
- 在django模板中创build第一个字母大写
- Django TemplateDoesNotExist?
- Django相当于PHP的表单值数组/关联数组
- 使用Django将数千条logging插入SQLite表的有效方法是什么?
- django:一起使用select_related和get_object_or_404
- 您需要安装用于构build服务器端扩展的postgresql-server-dev-XY或用于构build客户端应用程序的libpq-dev
- Djangodate时间问题(默认= datetime.now())