2017-11-21 2 views
0

getattrメソッドを別のgetattrの内部で使用するにはどうすればよいですか?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文字列の正しい記述することができます。
は、私はそのような何かを書きたいですか?

+0

は、あなたがこれを行うことになっているかを説明することはできます役立ちますか? –

+0

'q'の' group'属性の 'name'属性を取得しますか? –

+0

Florian Rhiem、まさに! –

答えて

1

私が正しくあなたを理解していれば、あなたはgroup属性を持つすべてのqオブジェクトのgroup秒のname秒を収集します。その場合は、次のコードは、2つの読み込み可能な段階に所望の動作を分割することによって動作します:すべてのqのオブジェクトがgroup属性を持っている場合は

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

、あなたも使用できます。

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')) 

このソリューションは、属性を反復処理します。クエリーセットから始め、グループを取得してグループ名を取得します。

+0

はい、これは正しいですが、私は自分のパラメータでただ一つの文字列を使いたいと思います。私は2つのループは必要ありません –

+0

2つのループはありません。ループは1つとifブロックは1つだけです。 ifブロックを避けたい理由はありますか?すべての 'q'オブジェクトは' group'属性を持っていますか? –

+0

はい、すべてのq個のオブジェクトにはグループ属性があります。しかし、異なるパラメータを持つ異なるクエリーセットに対しては、私の機能の一部しかありません。私は文字列のリストとして私のパラメータを取得します。また、時には現在のオブジェクトからだけでなく、属性を取得したい。これは、私は別の属性からいくつかの属性を取得するために魔法の文字列でいくつかの文字列 'my_attr'を書き込もうとしています。 –

0

私は答えを見つけました!
Pythonで乗算サンプルを作成するには、'firstfield__secondfield__thirdfield'を使用する必要があります。私は書くべき問題の説明の内側に私の例
queryset_for_table.values('group__name')
多分それはそこに誰か

関連する問題