图像不保存在用户保护(Django)中



我有一个模型表单来更新用户配置文件,除了图像之外,所有内容都保存正确。如果我使用admin,则可以更新,但是当我使用我的表单时,它只是保留为默认配置文件映像。

这是我的形式:

class EditProfileForm(forms.ModelForm):  
    birth_date = forms.DateField(label='birth_date', input_formats=['%Y-%m-%d'])
    class Meta:
        model = UserProfile
        fields = (
            "image",
            "bio",
            "location",
            "birth_date",
        )

这是我的模型:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)
    image = models.ImageField(upload_to='profile_image', blank=True)
    def __str__(self):
        return self.user.username
    def create_profile(sender, **kwargs):
        if kwargs['created']:
            user_profile = UserProfile.objects.create(user=kwargs['instance'])
    post_save.connect(create_profile, sender=User)

这是我的观点:

def edit_profile(request):
    instance = get_object_or_404(UserProfile, user=request.user)
    if request.method == 'POST':
        form = EditProfileForm(request.POST, instance=instance)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.user = request.user
            instance.save()
            return redirect('/')
    else:
        form = EditProfileForm(instance=request.user)
    return render(request, 'edit_profile.html', {'form': form})

这是我的html:

{% extends 'base.html' %}
{% block content %}
<h1>Edit Profile</h1>
<form method='POST' action=''>{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-outline-success">Save</button>
</form>
</body>
{% endblock %}

用于文件上传您需要指定表单的enctype:

<form method='POST' action='' enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-outline-success">Save</button>
</form>

,您应该将请求的文件传递到查看中的实例:

form = EditProfileForm(request.POST, request.FILES, instance=instance)

检查此文档以获取详细信息。

最新更新