Champs du modèle Django getter / setter
est là quelque chose comme getters et setters pour django modèle de champs?
Par exemple, j'ai un champ de texte dans lequel j'ai besoin de faire une chaîne de remplacer avant d'être enregistrée (dans le panneau d'admin, pour les insérer et les opérations de mise à jour) et en faire une autre, différente de remplacer chaque fois qu'il est lu. Ceux de la chaîne de remplacer sont dynamiques et doivent être faites au moment de l'enregistrement et de la lecture.
Que je suis à l'aide de python 2.5, je ne peux pas utiliser la version 2.6 de python getters /setters.
Toute aide?
source d'informationauteur pistacchio
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également remplacer setattr et getattr. Par exemple, disons que vous voulez marquer un champ sale, vous pourriez avoir quelque chose comme ceci:
Vous pouvez ajouter un
pre_save
gestionnaire de signal le Modèle que vous désirez enregistrer les mises à jour les valeurs avant d'être sauvés de la base de données.Ce n'est pas tout à fait la même chose qu'un setter depuis les valeurs restent dans leur format incorrect jusqu'à ce que la valeur est enregistrée. Si c'est un compromis acceptable pour votre situation, puis les signaux sont la meilleure façon d'atteindre cet objectif sans travail autour de l'ORM de Django.
Edit:
Dans votre situation standard de Python propriétés sont probablement le chemin pour aller avec ça. Il y a un de longue date, billet pour ajouter bon getter/setter de soutien à Django, mais ce n'est pas un simple problème à résoudre.
Vous pouvez ajouter les champs de propriété de l'administrateur en utilisant les techniques de ce blog
Primordial setattr est une bonne solution, sauf que cela peut causer des problèmes d'initialisation de l'ORM objet à partir de la DB. Cependant, il existe une astuce pour contourner ce problème, et c'est universel.
Le secret est " attrname en soi.__dict__'. Lorsque le modèle initialise soit de nouveau ou hydratés de la __dict__!