Не удаётся загрузить изображение на сервер в Django

Рейтинг: 0Ответов: 2Опубликовано: 18.06.2023

Я хотел бы загружать изображения на сервер Django через форму. На сайте админа это у меня прекрасно получается. Но при попытке загрузки через пользовательскую формы оно не загружается, хотя ошибок не выдаёт. Я реализую загрузку медиафайлов на сервер следующим образом:

# метод для страницы со формой:

def crt_rs(request):
    if request.user.is_authenticated: return render(request,"resume.html")
    else:
        response = redirect("log_in/")
        return response
#получение данных из запроса:
def add_rs(request):
#получение различных данных
    FIO = request.POST.get("FIO")
    teleph = request.POST.get("teleph")
    prof = request.POST.get("prof")
    exp_wk = request.POST.get("exp_wk")
    about =request.POST.get("about")
    tch = request.POST.get("tch")
    email = request.POST.get("email")
#получение изображения
    document = request.POST.get("document")
#сохранение данных в одной модели
    a = ResumeWorker(FIO=FIO,teleph=teleph,prof=prof,
                     exp_wk=exp_wk,about=about,
                     tch=tch,email=email)
    a.save()
#сохранение изображения в другой модели
    b = ost(title=FIO,cover=document)
    b.save()

HTML-разметка формы, через которую передают данные:

<form method="post" action="add_rs">
    <p><input type="file"  name="document"/></p>
    <p>ФИО<br> <input name="FIO" /></p>
    <p>Телефон<br> <input name="teleph"/></p>
    <p>Профессия<br> <input name="prof"/></p>
    <p>О себе(100 символов)<br> <input name="about"/></p>
    <p>Образование<br> <input name="tch"/></p>
    <p>E-mail<br> <input name="email"/></p>
    <p>Опыт работы<br> <input name="exp_wk"/></p>
    <input type="submit" value="Send" />
</form>

содержание модели ost и resume_worker:

class ResumeWorker(models.Model):
    """
    A typical class defining a model, derived from the Model class.
    """

    # Fields

    FIO = models.CharField(max_length=50, help_text="ФИО")
    teleph = models.CharField(max_length=12, help_text="номер телефона")
    prof = models.CharField(max_length=30, help_text="Профессия")
    exp_wk = models.CharField(max_length=100, help_text="Опыт работы (нету - 0)")
    about = models.CharField(max_length=100, help_text="О себе (100 символов)")
    tch = models.CharField(max_length=20, help_text="Образование")
    email = models.CharField(max_length=30, help_text="Email")
    
    def get_absolute_url(self): return reverse('model-detail-view', args=[str(self.id)])

    def __str__(self): return self.FIO
    @staticmethod
    def rw(): return ResumeWorker.objects.all()

class Forum(models.Model):
    """
    A typical class defining a model, derived from the Model class.
    """

    # Fields

    usr = models.CharField(max_length=50, help_text="Отправитель")
    text = models.CharField(max_length=100, help_text="Текст")
    time = models.CharField(max_length=30, help_text="Время отправки")

    def get_absolute_url(self): return reverse('model-detail-view', args=[str(self.id)])

    def __str__(self): return self.usr
    @staticmethod
    def rw(): return Forum.objects.all()


from django.db import models


class ost(models.Model):
    cover = models.ImageField(upload_to="media")
    title= models.CharField(max_length=100, help_text="Текст")
    def __str__(self): return self.title

Где я допустил ошибку и почему медиафайлы не загружаются через мою форму?

Ответы

▲ 1Принят

Попробуй ещё вот это.

from django.urls import path, include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
   path('admin/', admin.site.urls),
   path('', include('main.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns() + static(settings.MEDIA_URL, 
document_root=settings.MEDIA_ROOT)
▲ 1

Нужно получить файлы из request.files:

document = request.FILES['document']

Также добавить enctype="multipart/form-data" в form:
<form method="post" action="add_rs" enctype="multipart/form-data">