Обслуживание загруженных пользователем изображений в разработке

У меня есть модель Profile, которая должна позволять пользователю загружать изображение профиля. В браузере форма, в которой я позволяю пользователю редактировать свой профиль, отображает поле ввода "Browse Images", но при отправке изображение не сохраняется и не создается каталог "media/", хотя остальные поля обновляются правильно.

models.py:

from django.db import models
from django.contrib.auth.models import User
from django.conf import settings

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    date_of_birth = models.DateField(blank=True, null = True)
    photo = models.ImageField(upload_to='users/%Y/%m/%d/', blank = True)

forms.py:

from django import forms
from django.contrib.auth.models import User
from .models import Profile
class UserEditForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email')

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('date_of_birth', 'photo')

views.py:

from django.shortcuts import render
from .forms import UserEditForm, ProfileForm

def edit(request):
    if request.method == 'POST':
        user_edit_form = UserEditForm(request.POST, instance=request.user)
        profile_edit_form = ProfileForm(data = request.POST,files = request.FILES, instance=request.user.profile)
        if user_edit_form.is_valid() and profile_edit_form.is_valid():
            user_edit_form.save()
            profile_edit_form.save()
    else:
        user_edit_form = UserEditForm(instance = request.user)
        profile_edit_form = ProfileForm(instance = request.user.profile)
    return render(request, 'account/edit.html', {'user_edit_form':user_edit_form, 'profile_edit_form': profile_edit_form})

шаблон:

  <h2>Edit Your Profile</h2>
  <form class="" action="." method="post">
    {{user_edit_form.as_p}}
    {{profile_edit_form.as_p}}
    {% csrf_token %}
    <input type="submit" name="" value="Change Profile">
  </form>

что касается специфических вещей для изображений, я добавил следующее в settings.py:

# url that handles the media served from MEDIA_ROOT
MEDIA_URL = '/media/'
# Absolute filesytem path to the directory that will hold uploaded files
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

и это для моего основного проекта urls.py:

from django.conf.urls.static import static
from django.conf import settings

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

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

Вернуться на верх