Загрузить изображение с формой модели Django
У меня проблемы с загрузкой следующей модели с формой модели. Я могу загрузить отлично в админке, но это не все, что полезно для проекта, который ограничивает доступ администратора.
#Models.py
class Profile(models.Model):
name = models.CharField(max_length=128)
user = models.ForeignKey(User)
profile_pic = models.ImageField(upload_to='img/profile/%Y/%m/')
#views.py
def create_profile(request):
try:
profile = Profile.objects.get(user=request.user)
except:
pass
form = CreateProfileForm(request.POST or None, instance=profile)
if form.is_valid():
new = form.save(commit=False)
new.user = request.user
new.save()
return render_to_response('profile.html', locals(), context_instance=RequestContext(request))
#Profile.html
<form enctype="multipart/form-data" method="post">{% csrf_token %}
<tr><td>{{ form.as_p }}</td></tr>
<tr><td><button type="submit" class="btn">Submit</button></td></tr>
</form>
Примечание: все остальные данные в форме сохраняются на отлично, фотография не загружается вообще. Спасибо за помощь!
4 ответа
Вам нужно пройти request.FILES
к вашей форме:
form = CreateProfileForm(request.POST, request.FILES, instance=profile)
Код инициализации формы должен быть таким:
form = MemberSettingsForm(request.POST or None, request.FILES or None, instance=user)
Добавьте это перед сохранением экземпляра модели:
new.profile_pic = request.FILES.get('profile_pic')
Я понял. Это была проблема с моим views.py. Вам нужно установить request.method == POST, чтобы убедиться, что у вас все еще есть экземпляр как часть формы. Хотя работает отлично.
#Views.py
def create_profile(request):
try:
profile = Profile.objects.get(user=request.user)
except:
pass
if request.method == 'POST':
form = CreateProfileForm(request.POST, request.FILES)
if form.is_valid():
new = form.save(commit=False)
new.user = profile.user
new.save()
else:
form = CreateProfileForm(request.POST or None, instance=profile)
return render_to_response('profile.html', locals(), context_instance=RequestContext(request))