Как отобразить очищенные данные электронной почты в импорте-экспорте django
У меня есть этот виджет:
class EmailWidget(CharWidget):
def clean(self, value, row=None, *args, **kwargs):
if value:
email_field = EmailField()
if email_field.clean(value):
return value
return None
который я использую здесь:
some_email= fields.Field(attribute='some_email',
widget=EmailWidget(),
column_name='some_email')
очистка в порядке, но она не указывает данные для очистки на табличном представлении в ошибках.
то, что я ожидал, было чем-то вроде этого:
Мне нужно только указать ее и отобразить среди списка ошибок во второй строке и втором столбце.
Я думаю, что вы неправильно реализуете виджет. Из docs на clean()
:
Возвращает соответствующий объект Python для импортированного значения.
Например, если вы импортируете значение из электронной таблицы, clean() обрабатывает преобразование этого значения в соответствующий объект Python.
Числа или даты могут быть очищены до соответствующих типов данных, и их не нужно импортировать как строки.
Это означает, что clean()
не нужно выполнять никакой дополнительной проверки. В случае с полем email, ему нужно будет только вернуть строковый объект, и CharWidget
сделает это за вас.
Однако есть более простой способ добиться желаемого. Если поле вашей модели объявлено как EmailField, то вам просто нужно установить clean_model_instances
Мета-атрибут на вашем ресурсе, и электронная почта будет подтверждена автоматически при импорте.
class Book(models.Model):
author_email = models.EmailField('Author email', max_length=75, blank=True)
class BookResource(ModelResource):
class Meta:
model = Book
clean_model_instances = True
При тестировании с помощью примера приложения, вывод будет следующим: