Answer the question
In order to leave comments, you need to log in
How to accept files in Django, create an object and save the file(s) to the server?
On the Internet I found an example for uploading files. Here is the js code:
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 );
}
});
});
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+')'
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question