Как загружать изображения на 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()
Вернуться на верх