Sto provando ad aggiungere un campo a un modello Django che rappresenterà un elenco di indirizzi e-mail. Vorrei che un utente inserisse un elenco di indirizzi separati da virgole in un modulo nell'admin, che verrà poi analizzato dalla mia app per inviare una serie di email.Campo Django personalizzato per memorizzare un elenco di indirizzi e-mail
La mia attuale implementazione copre l'idea di base, ma ha un limite significativo. Nell'amministratore, se inserisco una stringa come [email protected], [email protected]
, la scrive correttamente nel database come [u'[email protected]', u'[email protected]']
. Ma l'amministratore visualizza questo valore serializzato invece della stringa umanizzata. Ancora più importante, se modifico e salvo il record, senza apportare modifiche, la stessa conversione cambia da [u'[email protected]', u'[email protected]']
a [u"[u'[email protected]'", u"u'[email protected]']"]
.
Come si converte la rappresentazione della lista Python in una stringa da utilizzare nell'amministratore? È questo lo scopo del metodo value_to_string
o devo effettuare la conversione da qualche altra parte?
Il mio attuale campo Modello personalizzato è la seguente:
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)
Questo si basa sul SeparatedValuesField
descritto qui: http://www.davidcramer.net/code/181/custom-fields-in-django.html.
Ha bisogno di essere una lista avrebbe lista qualcosa di simile al separati da virgola nell'esempio docs - http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field- lavoro di pulizia di default? – JamesO
Grazie, ma quell'esempio è per un campo modulo, per convalidare l'input di un utente. Quello di cui ho bisogno è un campo modello, per salvare più indirizzi nel database. – AndrewF