Как загружать изображения на django?
Я пытался загрузить изображение в Django с помощью пользовательского представления и у меня ничего не получилось. Однако панель администратора позволяет мне загружать изображения, в чем может быть проблема? Я установил Pillow и убедился, что форма имеет свойство multipart/form-data. Должен ли я создать отдельную модель для изображений?
models.py
class Profile(models.Model):
username = models.OneToOneField(User, on_delete=models.CASCADE)
gender = models.TextField(max_length=10)
dob = models.DateField(null=True, blank=True)
phone_no = models.CharField(unique=True, max_length=9)
address = models.CharField(max_length=50)
profile_pic = models.ImageField(null=True, blank=True, upload_to="profile_pic/")
nrc_front = models.ImageField(null=True, blank=True, upload_to="nrc_front/")
nrc_back = models.ImageField(null=True, blank=True, upload_to="nrc_back/")
is_verified = models.BooleanField(default=False)
is_group_admin = models.BooleanField(default=False)
is_group_member = models.BooleanField(default=False)
temp_code = models.CharField(max_length=6, null=True, blank=True)
def __str__(self):
return str(self.username)
settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(
BASE_DIR / 'media'
)
view.py
def updateProfilePic(request):
profiledata = get_profile_data(request)
form = UpdateProfilePicForm()
if request.method == "POST":
form = UpdateProfilePicForm(request.POST, request.FILES)
if form.is_valid():
profile_pic = form.cleaned_data.get("profile_pic")
Profile.objects.filter(username=request.user).update(profile_pic=profile_pic)
return redirect('profile')
else:
form = UpdateProfilePicForm()
context = {
"profiledata":profiledata,
"form":form
}
return render(request, 'base/profile-update-picture.html', context)
шаблон
{% extends 'base/base.html' %}
{% block title %}Update Picture{% endblock %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<div class="form-container shadow p-3 mb-5 bg-white rounded mx-auto">
{% crispy form %}
</div>
</div>
{% endblock %}
рендеринг браузера
<form action="/update-profile-picture/" class="form-group" method="post" enctype="multipart/form-data">
в моем url.py
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Вы просто измените этот код из view.py
Profile.objects.filter(username=request.user).update(profile_pic=profile_pic)
To:
Пример вашей таблицы User таков:
class User(models.Model):
name_user=models.CharField(max_lenght=50)
Измените код view.py на:
Profile.objects.filter(username__name_user=request.user).update(profile_pic=profile_pic)
можете попробовать
Profile.objects.filter(username=request.user)
to:
user_profile = Profile.objects.get(username=request.user)
user_profile.profile_pic = profile_pic
user_profile.save()