est-il possible de remplacer les valeurs à l'intérieur d'un modèle?
J'obtiens 'MyModel' Object ne prend pas en charge l'affectation des articles. Strong>
3 Réponses :
Les modèles sont des objets, pas des dictionnaires. Définissez les attributs sur eux directement: ou, si le nom de l'attribut est dynamique, utilisez Ceci modifie la copie en mémoire du modèle, mais n'effectue aucune modification de la base de données - pour que votre attribut devrait être un champ et que vous auriez appelé le setattr code>: p> Enregistrer code> Méthode sur My_Model code>. Vous n'avez pas besoin de le faire si vous voulez simplement modifier ce que le modèle reçoit dans son contexte, mais simplement pour l'amour de l'exhaustivité: p> mydict = {'title': 'foo'}
# legal
mydict['title'] = 'something'
OMG, quelle erreur muette! Merci!
En général, les attributs d'objet sont en fait stockés sous forme de dictionnaire ( my_model .__ dict __ code>, pour ce cas) de sorte que votre intuition n'est pas grave. Mais il existe des raisons très saines de ne pas avoir accès directement à ce dictionnaire.
@Peterdeglopper Je pense que vous devez appeler .Save () code> afin de mettre à jour un modèle Django.
@GamesBrainiac Si vous souhaitez que les modifications soient enregistrées dans la base de données, oui. J'ai eu l'intention de ma déclaration dans la réponse pour résoudre ce problème: "Ceci modifie la copie en mémoire du modèle, mais ne modifie pas de modifications de base de données - pour que votre attribut devrait être un champ et que vous auriez appelé le Enregistrer code> méthode. " Pensez-vous que cela manque quelque chose? Je modifierai plus d'informations si nécessaire.
@Peterdeglopper Je pense que votre réponse est parfaite, juste un lien vers des documents de Django serait la cerise sur le dessus! : D Je fais toujours cela, depuis le plus souvent, les docs ont toutes les réponses que vous voulez.
Oui, vous pouvez modifier des valeurs, mais ce n'est pas comment c'est fait. Les modèles Django sont des classes Python qui ont des modèles pour représenter des champs. Par exemple, un charfield code> est destiné à détenir une chaîne dans une base de données. Permettez-moi de démontrer ( code de Django Docs ): if my_model.is_changed:
my_model.title = "Something"
my_model.save()
@Peterdeglopper Merci pour cela, je modifiez une autre question sur un autre forum, alors j'ai passé la mauvaise chose là-bas, et ici! : P
my_model est un objet. Alors, essayez ceci:
Quel est l'objectif que vous essayez d'atteindre?
Juste pour montrer un autre titre dans mon modèle, au cas où cela a été modifié. Ce "autre titre" fetch autre table