django-crispy-формы как сохранить изображение
Я пытаюсь сохранить изображение с помощью django-crispy-форм. Я получаю "Нет" при попытке сохранить его каждый раз. Есть ли какие-то особые предостережения для crispy_forms для сохранения изображений?
Вот мой forms.py:
class Edit_Profile(forms.ModelForm):
class Meta:
model = MyUser
fields = ('display_name', 'real_name', 'email', 'location', 'picture',)
helper = FormHelper()
helper.form_method = 'POST'
helper.form_class = 'form-horizontal'
helper.label_class = 'col-lg-2'
helper.field_class = 'col-lg-8'
helper.layout = Layout(
Fieldset(
'', 'display_name', 'real_name', 'email', 'location', 'picture',
),
Div(
Submit('submit', 'Submit', css_class='btn-primary'),
css_class='col-lg-offset-2',
)
)
def update_info(self, user, myuser):
""" get the user, and update info """
cd = self.cleaned_data
print(cd)
myuser = MyUser.objects.get(user=user)
try:
myuser.display_name = cd['display_name']
myuser.real_name = cd['real_name']
myuser.location = cd['location']
myuser.picture = cd['picture']
myuser.save()
user.email = cd['email']
user.save()
except:
raise forms.ValidationError("Unable to update profile")
И мои views.py:
@login_required(login_url=reverse_lazy('core:login'))
def edit_profile(request, username):
myuser=MyUser.objects.get(user=request.user)
info = profile_info(user=request.user, myuser=myuser)
if request.method == 'POST':
form = Edit_Profile(request.POST)
if form.is_valid():
print(form.cleaned_data['picture'])
form.update_info(user=request.user, myuser=myuser)
messages.info(request, 'Profile updated')
return HttpResponseRedirect(reverse('core:profile',
kwargs={'username': request.user.username}))
else:
messages.warning(request, 'Unable to update profile')
return HttpResponseRedirect(reverse('core:profile',
kwargs={'username': request.user.username}))
else:
form = Edit_Profile(initial=profile_data(user=request.user, myuser=myuser))
return render(request, 'core/edit_profile.html', {'form': form})
1 ответ
Решение
Загруженные файлы в Django находятся в request.FILES
, так:
if request.method == 'POST':
form = Edit_Profile(request.POST, request.FILES)
Обратите внимание, что ваш <form>
потребности enctype="multipart/form-data"
, иначе request.FILES
будет пустой объект.