Как отобразить очищенные данные электронной почты в импорте-экспорте 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')

очистка в порядке, но она не указывает данные для очистки на табличном представлении в ошибках.

enter image description here

то, что я ожидал, было чем-то вроде этого:

enter image description here

Мне нужно только указать ее и отобразить среди списка ошибок во второй строке и втором столбце.

Я думаю, что вы неправильно реализуете виджет. Из 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

При тестировании с помощью примера приложения, вывод будет следующим:

email validation failure

Вернуться на верх