2009-10-09 10 views
23

Cela semble être mortel, donc il me manque quelque chose. Je veux juste définir la valeur d'un champ dans mon instance de modèle par son nom. Dire que j'ai:Comment définir le champ du modèle django par son nom?

class Foo(Model): 
    bar = CharField() 

f = Foo() 

Je veux définir la valeur de la barre par nom, pas en accédant au champ. Donc, quelque chose comme:

f.fields['bar'] = 'BAR" 

au lieu de

f.bar = 'BAR' 

J'ai essayé setattr mais il ne persiste pas la valeur de la base de données. J'ai aussi essayé de passer par _meta.fields mais j'ai eu diverses erreurs en cours de route.

Répondre

48

Si vous modifiez la valeur via setattr, vous devez vous souvenir de sauvegarder le modèle après l'avoir modifié. J'ai été mordu dans le passé où j'ai changé les valeurs mais j'ai oublié de sauvegarder le modèle, et j'ai obtenu le même résultat.

setattr(f, 'bar', 'BAR') 
f.save() 
+10

DOH! Oui, j'ai oublié de sauvegarder. Je vais aller me cacher dans la honte maintenant ... –

13

Nous pourrions avoir à voir plus de code.

setattr(f, 'bar', 'BAR') 

devrait fonctionner car c'est ainsi que Django le fait en interne.

Assurez-vous également que vous appelez 'enregistrer'.

Questions connexes