代码之家  ›  专栏  ›  技术社区  ›  Tsuna

是否能够将字段保存到变量中并用于queryset.value()?django公司

  •  1
  • Tsuna  · 技术社区  · 6 年前

    我知道当我们打电话 querysets ,我们可以使用 values() 获取所需字段,如 values('name', 'other_model__title') 等等。

    但我想知道是否可以将其保存为变量,例如:

    value_fields = ('name', 'other_model__title')
    model.objects.filter().values(value_fields)
    

    我已经试过了,但是失败了,我也试过用 list 而不是 tuple 也失败了,给我一个错误的说法 object has no attribute split

    提前谢谢你的帮助。

    P、 这是给django 1.9的

    1 回复  |  直到 6 年前
        1
  •  2
  •   willeM_ Van Onsem    6 年前

    是的 ,你可以“ 打开 “很适合 位置 在Python中使用 单星号 ( * )在函数调用中,例如:

    value_fields = ('name', 'other_model__title')
    model.objects.all().values(*value_fields)
    #                          ^ asterisk

    如果你调用一个函数 f(..) 带着一个 xs 喜欢 f(*xs) ,然后Python将其称为 f(x1, x2, xn) (与 x i 的单个元素 xs型 可接受)。因为您将参数存储在元组(元组)中 它将因此称为 .values(..) 功能 .values('name', 'other_model__title') ).

    用两个星号(比如 f(**some_dict) ),您可以将类似词典的对象解压缩到 命名的 参数。