tutorial Accéder aux champs du modèle Django en utilisant une chaîne au lieu de la syntaxe point?




django tutorial français pdf (4)

Vous pouvez utiliser la fonction getattr() python:

getattr(test, 'name')

Dans Django, je peux faire ceci:

test = Test.objects.get(id=1)
test.name

Je veux être en mesure d'accéder aux propriétés en utilisant des chaînes générées dynamiquement, comme ceci:

test['name']

ou, toute autre syntaxe utilisant une chaîne. j'ai essayé

test._meta.get_field_by_name('name')

mais cela renvoie le champ lui-même et non la valeur.

Des idées?


En Python, vous pouvez normalement accéder aux valeurs d'un objet ayant une méthode dict .

Disons que vous avez cette classe:

class Dog(object):
    def __init___(self, color):
        self.color = color

Et puis je l'instancie:

dog = Dog('brown')

Donc je peux voir la couleur en faisant:

print dog.color

Je peux aussi voir la couleur en faisant:

print dog.__dict__['color']

Je peux définir la couleur:

print dog.__dict__['color'] = 'green'

print dog.color

>>>green

En supposant que le nom est un attribut de votre test d' instance , getattr(test, 'name') devrait retourner la valeur correspondante. Ou test.__dict__['name'] .

Vous pouvez en savoir plus sur getattr() ici: http://effbot.org/zone/python-getattr.htm


D'autres réponses existent encore, mais maintenant vous pouvez le faire en utilisant _meta.get_field () de Django.

test._meta.get_field('name')

Notez que l'API Modèle _meta a commencé son support officiel et sa documentation partir du 1.8, mais a été distribué et utilisé dans des versions antérieures avant sa documentation officielle.





django-models