Как сохранить изображение в Django?
В модели прописано следующее:
// другие поля ...
avatar = models.ImageField(upload_to='images/user_avatars', default='', null=True)
Форма html
<form method="post" action="{% url 'user_profile:edit_information' %}" enctype="multipart/form-data">
<input name="avatar" class="form-control" type="file" id="formFile">
Ну и контроллере есть метод в котором вся логика
UserProfile.objects.filter(user_id=user.id).update(
// другие поля
company=request.POST.get('company'),
avatar=request.FILES.get('avatar')
)
Все данные успешно обновляются, за исключением изображения. В бд сохраняется только имя загружаемого файла, самого же файла в проекте нет.
Что бы сохранить изображение отправленное с HTML
формы, нужно создать объект модели и вызвать метод, создающий данные в БД. При вызове объекта рекомендую поменять поле модели avatar
на FileField
:
avatar = models.FileField(upload_to='images/user_avatars', ...)
После чего уже вызвать нужный метод:
UserProfile.objects.create(
avatar = req.FILES.get('avatar')
)
Или его аналог, который обновляет запись, а если ее нет, то добавляет ее в таблицу:
queryset = req.FILES
kwargs = {..., "avatar":queryset['avatar']}
UserProfile.objects.update_or_create(
критерий_выборки_для_обновления = ...
defaults = kwargs
)