Валидация и обработка файлового поля 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