Обслуживание загруженных пользователем изображений в разработке
У меня есть модель 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)
и установил подушку. Я не уверен в том, что я упускаю из виду, из-за чего изображения не сохраняются при отправке формы. Спасибо за любую помощь в этом вопросе.