【问题标题】:Can I going to access django orm's column as a string + variable?我可以将 django orm 的列作为字符串 + 变量访问吗?
【发布时间】:2019-10-13 17:35:26
【问题描述】:

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

例如有可能吗?

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

或者有其他方法吗?

谢谢你告诉我

【问题讨论】:

    标签: django-queryset django-orm


    【解决方案1】:

    您可以将它与字典一起传递,并进行字典解包。事实上,我们可以通过以下方式批量更新:

    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

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

    话虽如此。通常,如果您在模型中存储了任意数量的值,那么对大量列执行此操作并不是一个好主意。因为您永远不知道需要额外的列。通常会制作一个额外的模型,并定义从该模型到目标模型的多对一关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多