web-dev-qa-db-ja.com

Djangoモデルフィールドの詳細名に動的にアクセスするにはどうすればよいですか?

モデルフィールドのverbose_nameにアクセスしたいのですが。

こんな感じで現地で入手できます

model._meta._fields()[2].verbose_name

動的に取得する必要があります。理想的にはこのようなものになります

model._meta._fields()['location_x'].verbose_name

いくつか調べましたが、見つかりません。

31
philgo20

Django <1.10の場合:

model._meta.get_field_by_name('location_x')[0].verbose_name

model._meta.get_field('location_x').verbose_name

19

Django 1.11および2.0の場合:

MyModel._meta.get_field('my_field_name').verbose_name

Djangoドキュメントの詳細情報

13
tupan

選択した答えは、以下のようなプロキシオブジェクトを提供します。

<Django.utils.functional.__proxy__ object at 0x{SomeMemoryLocation}>

誰かが同じものを見ている場合は、詳細名の文字列を 題名() プロキシオブジェクトのメンバー関数。

model._meta.get_field_by_name(header)[0].verbose_name.title()

これを書くより良い方法は:

model._meta.get_field(header).verbose_name.title()

ここで、headerは、関心のあるフィールドの名前になります。つまり、OPコンテキストの「location-x」です。

[〜#〜]ノート[〜#〜]:Djangoの開発者もget_fieldの方が良いため、価値が低下しましたget_field_by_name in Django 1.10。したがって、get_field Djangoのどのバージョンを使用しているかに関係なく。

12
nnb
model._meta.get_field_by_name('location_x')[0].verbose_name
7

すべてのフィールドを反復処理する場合は、fieldを取得する必要があります。

for f in BotUser._meta.get_fields():
    if hasattr(f, 'verbose_name'):
        print(f.verbose_name)
0
Arian Soltani