@i_egor

Как принять файлы в Django, создать объект и сохранить файл(ы) на сервер?

В интернете нашел пример для загрузки файлов. Вот код 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+')'
  • Вопрос задан
  • 498 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы