7
votes

Comment sauvegarder l'objet Django à l'aide du dictionnaire?

Y a-t-il une façon de sauvegarder le modèle à l'aide du dictionnaire

pour par exemple. Cela fonctionne bien, xxx

mais si j'ai un dictionnaire comme {"nom": "Sondage", 'Description: "Description de Sondage"}

Y a-t-il un moyen simple d'enregistrer le tel dictionnaire directement au sondage


0 commentaires

4 Réponses :


28
votes

Vous pouvez déballer le dictionnaire, faire de ses clés et de ses valeurs comme des arguments nommés: xxx


0 commentaires

31
votes

La solution de DRMEGAHERTZ fonctionne si vous créez un nouvel objet à partir de zéro. Dans votre exemple, cependant, vous semblez vouloir mettre à jour un objet existant. Vous le faites en accédant à l'attribut __ dict __ que chaque objet Python a: xxx


1 commentaires

Cela peut être très utile pour maintenir le principe sec en faisant des trucs difficiles sur la méthode Save () de modelform . Par exemple, j'ai un formulaire AA qui copie nettoyé_data vers un nouveau dictionnaire, puis supprime certains champs de celui-ci - car les valeurs d'autres champs les rendent non pertinents ou contradictoires - ne sauvent que les champs restants en ce sens que Dictionnaire sur l'instance (et l'instance est un objet qui a déjà été initialisé).



1
votes

Je trouve que cette variante a fonctionné pour moi clairement. Également dans ce cas, tous les signaux seront déclenchés correctement

p1 = Poll.objects.get(pk=1)
values = { 'name': 'poll2', 'description': 'poll2 description' }        
for field, value in values.items():
    if hasattr(p1, field):
        setattr(p1, field, value)
p1.save()


0 commentaires

0
votes

Vous pouvez y parvenir en utilisant Mise à jour sur Un fichier filtre:

par exemple: xxx

notes:

  • Sachez que .update ne déclenche pas les signaux
  • Vous voudrez peut-être mettre un chèque là pour vous assurer que seul 1 résultat est retourné avant de mettre à jour (juste pour être du côté de sécurité). E.g.: si p1.count () == 1: ...
  • Cela peut être une option préférable d'utiliser des méthodes __ tels que __ dict __.

0 commentaires