J'aimerais avoir accès à l'un de mes champs de modèle nom_base.
Je peux l'obtenir par l'indice de champ comme celui-ci
model._meta._fields()[2].verbose_name
mais j'ai besoin de l'obtenir de manière dynamique. Idéalement, ce serait quelque chose comme ça
model._meta._fields()['location_x'].verbose_name
J'ai examiné certaines choses mais je ne les trouve pas.
Pour Django <1.10:
model._meta.get_field_by_name('location_x')[0].verbose_name
model._meta.get_field('location_x').verbose_name
La réponse sélectionnée donne un objet proxy qui pourrait ressembler à celui ci-dessous.
<Django.utils.functional.__proxy__ object at 0x{SomeMemoryLocation}>
Si quelqu'un voit la même chose, vous pouvez trouver la chaîne du nom détaillé dans le champ titre() fonction membre de l'objet proxy.
model._meta.get_field_by_name(header)[0].verbose_name.title()
Une meilleure façon d'écrire cela serait:
model._meta.get_field(header).verbose_name.title()
où header
sera le nom du champ qui vous intéresse. Par exemple, "emplacement-x" dans le contexte des PO.
NOTE: Les développeurs de Django estiment également que l’utilisation de get_field
est préférable et ont donc amorti get_field_by_name
dans Django 1.10. Ainsi, je suggérerais d'utiliser get_field
quelle que soit la version de Django que vous utilisez.
Pour Django 1.11 et 2.0:
MyModel._meta.get_field('my_field_name').verbose_name
Plus d'infos dans le Django doc
model._meta.get_field_by_name('location_x')[0].verbose_name
Si vous voulez parcourir tous les champs, vous devez obtenir la variable field
:
for f in BotUser._meta.get_fields():
if hasattr(f, 'verbose_name'):
print(f.verbose_name)