我想在django ORM中执行以下操作:
field = 'name'
value = 'patrick'
Asset.objects.filter(field=value)
在一次性的基础上,我可以做:
a = Asset()
a.setattr(field, name)
a.save()
但这对我的目的来说太长了。
是否可以使用object
,因为我有大约 50k 个项目要根据用户提供的枚举字段/值进行更新。
另一种说法是如何模拟这种模式,或者我必须为此编写原始 sql,即"SELECT * FROM asset WHERE %s='%s' % (field, value)
(注意我现在表达式倾向于 SQL 注入,但这很好 - 这是受信任(枚举(的输入值(。
>>> Asset.objects.filter('name'='patrick')
File "<console>", line 1
SyntaxError: keyword can't be an expression
关键字参数可以在您的情况下使用。
- 关键字参数:在函数调用中以标识符(例如 name=(开头的参数,或在字典中作为值以 ** 开头传递的参数。例如,3 和 5 都是以下对 complex(( 的调用中的关键字参数:
complex(real=3, imag=5)
complex(**{'real': 3, 'imag': 5})
在您的情况下,它将如下所示。
key = input()
value = input()
kwargs = {
'{0}'.format(key): '{0}'.format(value),
}
Asset.objects.filter(**kwargs)
您也可以添加 for 循环等,无论这回答了您的问题,希望这可以解决您的问题。