Валидация и обработка файлового поля DjangoAdminForm

В проекте Django я хотел бы использовать форму администратора для загрузки и обработки файлов. Если что-то в файле не соответствует действительности, пользователю должна быть показана ошибка валидации.

Мой вопрос: как это можно сделать "одним шагом"? В настоящее время я вижу возможность сделать это только в вызове _validate_or_process_data в times.

models.py

def _validate_or_process_data(data):
    sheets = pd.read_excel(data.file, sheet_name = None, dtype = object)
    sheet_sums = sheets['Sums']
    df = sheet_sums[(sheet_sums['text']=="Sum of foo")]
    if len(df.index) > 1:
        raise ValueError('foo')
    # further quite complicated processing, which could also lead to an Exception
    return df

class InvoiceFile(models.Model):
    data = models.FileField(validators=[_validate_or_process_data])

    def save(self, *args, **kwargs):
        uploaded_file = self.data.file

        super(InvoiceFile, self).save(*args, **kwargs)
        # processing after calling super() to upload the orginal file
        processed_data = _validate_or_process_data(uploaded_file)
        # processed_data is then used to fill child-elements of InvoiceData
Вернуться на верх