2009-10-23 8 views
0

J'ai un dictionnaire que je voudrais parcourir et copier les paires clé-valeur dans un objet en Python. Le dictionnaire est POST, et l'objet est un Model (dans Django, peut-être que Django a le meilleur moyen de le faire).Copier des valeurs d'un dictionnaire dans un objet en Python

En PHP, je serais capable d'utiliser les affectations de variables:

foreach($post as $key => $value) { 
    $my_model->$key = $value; 
} 

Et en Javascript que je pourrais traiter l'objet avec des affectations de tableau:

for(var key in post) { 
    my_model[key] = post[key]; 
} 

Cependant, je ne peux pas sembler pour le faire en Python. La seule façon que j'ai vu est en utilisant les objets __dict__ propriété, et il se sent toujours si légèrement sale. De plus, il peut augmenter KeyErrors.

Répondre

5
for key, value in post.iteritems(): 
    setattr(my_model, key, value) 
+0

Je pense que oggy a raison de dire qu'il devrait se plonger davantage dans ModelForms. Non pas que ça ne marche pas, et c'est ce qu'il demande, mais il a tagué le problème en tant que django ... – cethegeek

+0

En effet, je l'ai tagué Django au cas où une réponse apparaitrait comme une meilleure façon de faire les choses à Django , peut-être comme ModelForms ... – seanmonstar

4

Vous pouvez utiliser setattr, mais c'est probablement la mauvaise façon de le faire dans votre contexte. Vous devriez d'abord regarder le ModelForms documentation de Django.

+0

J'ai vu les ModelForms. le problème que j'ai avec eux est que si je n'ai pas POST toutes les valeurs du Modèle, il se plaint. Mon objectif initial était de récupérer le modèle à partir de la base de données, de modifier les propriétés que j'avais publiées, puis de le sauvegarder. – seanmonstar

+4

Ensuite, vous n'utilisez pas le bon formulaire. Si vous ne voulez pas afficher toutes les valeurs, utilisez 'exclude' pour les exclure du champ (ou' fields' pour n'inclure que ceux dont vous avez besoin). –

Questions connexes