Я пытаюсь добавить поле в модель Django, которая будет представлять список адресов электронной почты. Я хотел бы, чтобы пользователь вводил список адресов, разделенных запятыми, в форму администратора, которую мое приложение затем проанализирует для отправки серии писем.Пользовательское поле Django для хранения списка адресов электронной почты
Мое настоящее воплощение охватывает основную идею, но имеет значительные ограничения. В admin, если я ввожу строку, такую как [email protected], [email protected]
, тогда она правильно записывает это в базу данных как [u'[email protected]', u'[email protected]']
. Но администратор отображает это сериализованное значение вместо гуманизированной строки. Что еще более важно, если я отредактирую и сохраню запись без внесения каких-либо изменений, те же изменения конверсии [u'[email protected]', u'[email protected]']
- [u"[u'[email protected]'", u"u'[email protected]']"]
.
Как преобразовать представление списка python обратно в строку для использования в admin? Это цель метода 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.
это должен быть список будет что-то вроде запятую в примере DOCS - http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field- работа по очистке по умолчанию? – JamesO
Спасибо, но этот пример предназначен для поля формы, чтобы проверить ввод пользователя. Мне нужно поле модели, чтобы сохранить несколько адресов в базе данных. – AndrewF