Как загрузить любой файл в Django 2 - PullRequest
0 голосов
/ 25 января 2019

Я новичок в Django 2. Я пытался загрузить файл в Django, вот мой код

View.py

def addBook(request):
    checkName = AddBook.objects.filter(title=request.POST.get('title'))
    if not checkName:
        bookAdd = AddBook(
            title=request.POST.get('title'),
            slug=slugify(request.POST.get('title')),
            description=request.POST.get('description'),
            cover_image=request.FILES.get('cover_image'),
            file=request.FILES.get('file'),
            category=request.POST.get('category'),
            created_by=request.user.id,
        )
        bookAdd.save()
        messages.add_message(request, messages.INFO, 'Book Saved Successfully')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        messages.add_message(request, messages.INFO, 'Book Title Already Exists')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

Обновление согласно комментарию

Вот мой код шаблона bookSave.html

<form action="{% url 'addBook' %}" method="post" enctype="multipart/form-data">
                    {% csrf_token %}
                    <div class="modal-body">
                        <div class="col-lg-12 col-md-12 col-sm-12 col-xs 12">
                            <div class="form-group ic-cmp-int">
                                <div class="form-ic-cmp">
                                    <i class="notika-icon notika-edit"></i>
                                </div>
                                <div class="nk-int-st">
                                    <input type="text" class="form-control input-sm" required="required" name="title"
                                           Placeholder="Title">
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="modal-body">
                        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                            <div class="form-group ic-cmp-int">
                                <div class="form-ic-cmp">
                                    <i class="notika-icon notika-mail"></i>
                                </div>
                                <div class="nk-int-st">
                                <textarea class="form-control input-sm" required="required" name="description"
                                          placeholder="Description"></textarea>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="modal-body">
                        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                            <div class="form-group ic-cmp-int">
                                <div class="form-ic-cmp">
                                    <i class="notika-icon notika-dollar"></i>
                                </div>
                                <div class="nk-int-st">
                                    <input type="file" name="cover_image" required="required" class="form-control input-sm">
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="modal-body">
                        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                            <div class="form-group ic-cmp-int">
                                <div class="form-ic-cmp">
                                    <i class="notika-icon notika-house"></i>
                                </div>
                                <div class="nk-int-st">
                                    <input type="file" name="file" required="required" class="form-control input-sm">
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="modal-body">
                        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                            <div class="form-group ic-cmp-int">
                                <div class="form-ic-cmp">
                                    <i class="notika-icon notika-next"></i>
                                </div>
                                <div class="nk-int-st">
                                    <input type="text" name="category" required="required" class="form-control input-sm"
                                           Placeholder="Category">
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button class="btn btn-default">Save changes</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    </div>
                </form>

Я могу сохранить все, но мне нужно сохранить путь к файлу и сохранить файл локально.Я читаю их документацию, но не могу мне помочь.Пожалуйста, помогите мне решить эту проблему

1 Ответ

0 голосов
/ 25 января 2019

FileField в вашей модели , кроме других полей, должно выглядеть так:

class AddBook(models.Model):
    # file will be uploaded to MEDIA_ROOT/uploads
    file = models.FileField(upload_to='uploads/')
    # or...
    # file will be saved to MEDIA_ROOT/uploads/2015/01/30
    file = models.FileField(upload_to='uploads/%Y/%m/%d/')

В вашем файле настроек вам нужно определить MEDIA_ROOT как полный путь к каталогу, в котором вы хотите, чтобы Django сохранял загруженные файлы. (Для производительности эти файлы не хранятся в базе данных.) Определите MEDIA_URL в качестве базового общедоступного URL-адреса этого каталога. Убедитесь, что этот каталог доступен для записи учетной записи пользователя веб-сервера.

в settings.py вы должны установить, например:

MEDIA_ROOT = '/home/foo/bar/yourproject/assets'

Также вы можете изучить и настроить хранилище статических файлов в Django (помимо папки «static»).

https://docs.djangoproject.com/en/2.0/howto/static-files/#configuring-static-files

В Django вы можете получить любой файл с Файловым Объектом, например:

from django.core.files import File

# Open an existing file using Python's built-in open()
f = open('/path/to/mybookfile.pdf')
myfile = File(f)
...