J'essaie d'ajouter un champ à un modèle Django qui représentera une liste d'adresses e-mail. Je voudrais qu'un utilisateur entre une liste d'adresses séparées par des virgules dans un formulaire dans l'admin, que mon application analysera ensuite pour envoyer une série de courriels.Champ Django personnalisé pour stocker une liste d'adresses e-mail
Ma mise en œuvre actuelle couvre l'idée de base, mais a une limitation importante. Dans l'admin, si j'entre une chaîne comme [email protected], [email protected]
, alors il écrit correctement dans la base de données [u'[email protected]', u'[email protected]']
. Mais l'administrateur affiche cette valeur sérialisée au lieu de la chaîne humanisée. Plus important encore, si je modifie et enregistre l'enregistrement, sans apporter de modifications, la même conversion change [u'[email protected]', u'[email protected]']
en [u"[u'[email protected]'", u"u'[email protected]']"]
. Comment puis-je convertir la représentation de la liste python en une chaîne à utiliser dans l'admin? Est-ce le but de la méthode value_to_string
ou ai-je besoin de faire la conversion ailleurs?
Mon champ actuel modèle personnalisé est la suivante:
class EmailListField(models.TextField):
__metaclass__ = models.SubfieldBase
def to_python(self, value):
if not value:
return
if isinstance(value, list):
return value
return [address.strip() for address in value.split(',')]
def get_db_prep_value(self, value):
if not value:
return
return ','.join(unicode(s) for s in value)
def value_to_string(self, obj):
value = self._get_val_from_obj(obj)
return self.get_db_prep_value(value)
Ceci est basé sur le SeparatedValuesField
décrit ici: http://www.davidcramer.net/code/181/custom-fields-in-django.html.
t-il besoin d'être une liste serait quelque chose comme la liste séparées par des virgules dans l'exemple docs - http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field- travail de nettoyage par défaut? – JamesO
Merci, mais cet exemple est pour un champ de formulaire, pour valider l'entrée d'un utilisateur. Ce dont j'ai besoin, c'est d'un champ de modèle, pour enregistrer plusieurs adresses dans la base de données. – AndrewF