Я пытаюсь добавить в модель Django поле, которое будет представлять список адресов электронной почты. Я хотел бы, чтобы пользователь ввел список адресов через запятую в форму администратора, которую мое приложение затем проанализирует, чтобы отправить серию писем.
Моя текущая реализация охватывает основную идею, но имеет существенное ограничение. В администраторе, если я ввожу строку типа foo@example.com, bar@example.com
, то она правильно записывает это в базу данных как [u'foo@example.com', u'bar@example.com']
. Но администратор отображает это сериализованное значение вместо гуманизированной строки. Что еще более важно, если я редактирую и сохраняю запись, не внося никаких изменений, то же преобразование изменяется с [u'foo@example.com', u'bar@example.com']
на [u"[u'foo@example.com'", u"u'bar@example.com']"]
.
Как мне преобразовать представление списка Python обратно в строку для использования в админке? Это цель метода value_to_string
или мне нужно сделать конвертацию где-нибудь еще?
Мое текущее поле пользовательской модели выглядит следующим образом:
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)
Это основано на SeparatedValuesField
, описанном здесь: http://www.davidcramer.net/code/181/custom-fields-in-django.html.