2010-04-23 4 views
3

est-il un moyen que je peux enregistrer le modèle en utilisant le dictionnairecomment enregistrer un objet django en utilisant un dictionnaire?

par exemple. cela fonctionne bien,

p1 = Poll.objects.get(pk=1) 

p1.name = 'poll2' 
p1.descirption = 'poll2 description' 

p1.save() 

mais si j'ai dictionnaire comme { 'name': 'poll2', « description: 'description poll2'}

est-il un moyen simple pour sauver la telle dictionnaire directement au vote

Répondre

22

solution de drmegahertz wo rks si vous créez un nouvel objet à partir de zéro. Dans votre exemple, cependant, vous semblez vouloir mettre à jour un objet existant. Vous faites cela en accédant à l'attribut __dict__ que chaque objet Python a:

p1.__dict__.update(mydatadict) 
p1.save() 
+0

Cela peut être très utile pour le respect du principe DRY tout en faisant des choses délicates sur la méthode 'save()' de 'ModelForm'. Par exemple, j'ai un formulaire qui copie 'nettoyé_données' dans un nouveau dictionnaire, puis supprime certains champs de celui-ci - parce que les valeurs des autres champs les rendent non pertinentes ou contradictoires - puis enregistre seulement les champs restants dans ce dictionnaire sur l'instance (et l'instance est un objet qui a déjà été initialisé). – hangtwenty

14

Vous pouvez déballer le dictionnaire, ce qui rend ses clés et des valeurs agissent comme arguments nommés:

data_dict = {'name': 'foo', 'description': 'bar'} 

# This becomes Poll(name='foo', description='bar') 
p = Poll(**data_dict) 
... 
p.save() 
Questions connexes