我可以以字符串+变量的方式访问django orm的列吗?

时间:2019-10-13 17:35:26

标签: django-queryset django-orm

我可以作为字符串+变量访问Django orm的列吗?

有可能吗?

    for x in range(i, 98)
        CategoryNick.obejcts.filter(author=request.user).update("ca"+(x+1)=F('ca'+x))

还是还有另一种方法?

想让我知道

1 个答案:

答案 0 :(得分:2)

您可以将其与字典一起传递,并进行字典解包。实际上,我们可以使用以下命令进行批量更新:

data = {'ca{}'.format(x+1): F('ca{}'.format(x)) for x in range(i, 98)}
CategoryNick.objects.filter(
    author=request.user
).update(**data)

因此,我们在这里将执行一个更新查询,如下所示:

UPDATE app_categorynick
SET ca2 = ca1, ca3 = ca2, ca4 = ca3, …, ca98 = ca97

请注意前面的两个星号(**)。如果您以f(**some_dict)为例调用函数some_dict,例如some_dict = {'a': 4, 'b': 2},它将以f调用f(a=4, b=2)

话虽如此。通常,如果您在模型中存储了任意数量的值,那么对大量列进行此操作不是一个好主意。由于您永远无法知道是否需要额外的列。通常,人们会制作一个额外的模型,并定义该模型与目标模型之间的多对一关系。