Django更新用户表单照片保存,但不会在网站中更新



因此,在教程结束后,我正在尝试自己的第一个django项目,并尝试添加一个更新用户配置文件页面。用户名和电子邮件更新得很好,但当我尝试更新个人资料图片时,它不会更新。即使文件保存在我的媒体文件夹中。

forms.py:

class UserUpdateForm(forms.ModelForm):
email = forms.EmailField()
class Meta:
model = User
fields = ('username', 'email')
class ProfileUpdateForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('image',)

views.py

@login_required
def profile(request, pk):
user = User.objects.get(id=pk)
profile = Profile(user=user)
user_form = UserUpdateForm(instance=request.user)
profile_form = ProfileUpdateForm(instance=request.user.profile)
if request.method == 'POST':
user_form = UserUpdateForm(request.POST, instance=request.user)
profile_form = ProfileUpdateForm(
request.POST, request.FILES, instance=request.user.profile)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
return redirect('home')
return render(request, 'registration/profile.html', {'user': user, 'profile': profile, 'user_form': user_form, 'profile_form': profile_form})
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<h3 class="display-3 mb-3">
{{ user.username }}
</h3>
<p>
{{ user.bio }}
</p>
<br>
<img src="{{ user.profile.image.url }}" alt="ok">
<hr>
<hr>
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="form-group">
<legend>Profile Info</legend>
{{ user_form|crispy }}
{{ profile_form|crispy }}
</fieldset>
<button type="submit" class="btn btn-sm btn-primary">Update</button>
</form>
{% endblock %}

如果你需要更多的代码,我会更新这个问题。这里到底出了什么问题?

尝试从绑定的ProfileUpdateForm中删除instance=request.user.profile。也许在profile_form.is_valid()检查之后添加profile.image = request.FILES['image']profile.save()。或者两者的结合。

最新更新