Estoy tratando de agregar un campo a un modelo de Django que representará una lista de direcciones de correo electrónico. Me gustaría que un usuario ingrese una lista de direcciones separadas por comas en un formulario en el administrador, que luego mi aplicación analizará para enviar una serie de correos electrónicos.Campo de Django personalizado para almacenar una lista de direcciones de correo electrónico
Mi implementación actual cubre la idea básica, pero tiene una limitación significativa. En el administrador, si ingreso una cadena como [email protected], [email protected]
, entonces escribe esto correctamente en la base de datos como [u'[email protected]', u'[email protected]']
. Pero el administrador muestra este valor serializado en lugar de la cadena humanizada. Más importante aún, si edito y guardo el registro, sin realizar ningún cambio, la misma conversión cambia [u'[email protected]', u'[email protected]']
a [u"[u'[email protected]'", u"u'[email protected]']"]
.
¿Cómo convierto la representación de la lista de python en una cadena para su uso en el administrador? ¿Es ese el propósito del método value_to_string
o necesito hacer la conversión en otro lugar?
Mi campo de modelo personalizado actual es la siguiente:
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)
Esto se basa en la SeparatedValuesField
se describe aquí: http://www.davidcramer.net/code/181/custom-fields-in-django.html.
¿Tiene que ser una lista sería algo así como la lista separada por comas en el ejemplo docs - http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field- trabajo de limpieza predeterminado? – JamesO
Gracias, pero ese ejemplo es para un campo de formulario, para validar la entrada de un usuario. Lo que necesito es un campo de modelo para guardar varias direcciones en la base de datos. – AndrewF