В интернете нашел пример для загрузки файлов. Вот код js:
var files;
$('body').on('change','#p_upload_file', function(){
files = this.files;
});
$('body').on('click','#p_upload_file_btn', function(){
event.stopPropagation(); // остановка всех текущих JS событий
event.preventDefault(); // остановка дефолтного события для текущего элемента - клик для <a> тега
// ничего не делаем если files пустой
if( typeof files == 'undefined' ) return;
// создадим объект данных формы
var data = new FormData();
// заполняем объект данных файлами в подходящем для отправки формате
$.each( files, function( key, value ){
data.append( key, value );
});
// добавим переменную для идентификации запроса
data.append( 'my_file_upload', 1 );
$.ajax({
url : 'add_document/',
type : 'POST',
data : {csrfmiddlewaretoken: getCookie('csrftoken'), data},
cache : false,
dataType : 'json',
// отключаем обработку передаваемых данных, пусть передаются как есть
//processData : false,
// отключаем установку заголовка типа запроса. Так jQuery скажет серверу что это строковой запрос
//contentType : false,
// функция успешного ответа сервера
success : function( respond, status, jqXHR ){
// ОК - файлы загружены
if( typeof respond.error === 'undefined' ){
// выведем пути загруженных файлов в блок '.ajax-reply'
var files_path = respond.files;
var html = '';
$.each( files_path, function( key, val ){
html += val +'<br>';
});
$('.list-ud').html( html );
}
// ошибка
else {
console.log('ОШИБКА: ' + respond.error );
}
},
// функция ошибки ответа сервера
error: function( jqXHR, status, errorThrown ){
alert( 'ОШИБКА AJAX запроса: ' + status, jqXHR );
}
});
});
Теперь я хочу их принять в фунции views:
def add_document(request):
doc_files = request.POST.get('data')
return HttpResponse('документ добавлен')
Это вроде работает, ошибок нет, загрузка проходит. Теперь как мне забрать эти файлы? Как я понял здесь отправляется несколько файлов. Мне нужно сохранить все что есть в созданном экземпляре модели:
class Document(models.Model):
name = models.CharField('Название документа', max_length=256)
file = models.FileField('Файл')
data = models.DateField('Дата', auto_now_add=True)
class Meta:
verbose_name = 'Документ'
verbose_name_plural = 'Документы'
def __str__(self):
return self.name+' ('+self.data+')'