在另一个getattr中使用getattr

时间:2017-11-21 15:29:24

标签: python django django-rest-framework

如何在另一个getattr内使用getattr方法? 我想写类似的东西:

    my_attr = 'group.getattr(name)'
    my_list = list()
    for q in queryset_for_table:
        y = getattr(q, my_attr, None)
        my_list.append(y)

我如何写my_attr字符串正确?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望收集具有name属性的所有group个对象的qgroup s。如果是这样,以下代码将通过将所需操作拆分为两个可读步骤来起作用:

my_list = list()
for q in queryset_for_table:
    group = getattr(q, 'group', None)
    if group is not None:
        my_list.append(group.name)

如果所有q个对象都具有group属性,您还可以使用:

my_list = list()
for q in queryset_for_table:
    my_list.append(q.group.name)

对于任意嵌套属性,以下内容应该有效:

def get_nested_attributes(object, attributes):
    for attribute in attributes:
        objects = [getattr(o, attribute, None) for o in objects]
    return objects

my_list = get_nested_attrs(queryset_for_table, ('group', 'name'))

此解决方案迭代属性。您从查询集开始,然后获取组,然后获取组名。

答案 1 :(得分:0)

我找到了答案!
我需要使用'firstfield__secondfield__thirdfield'在python中创建多个样本 对于我在问题描述中的例子我应该写: queryset_for_table.values('group__name')
也许它会帮助那里的人