【问题标题】:Django: How can I update the profile pictures via ModelForm?Django:如何通过 ModelForm 更新个人资料图片?
【发布时间】:2015-03-25 02:31:37
【问题描述】:

我正在尝试编写一个小型 Django 系统。登录系统后,用户可以编辑和保存自己的个人资料信息。涉及的字段是:用户名、电子邮件、名字、姓氏、网站和图片。

问题:图片无法更新(选择图片点击“更新”按钮后显示“未选择文件”。页面显示的头像还是旧的)。但是其他字段都OK。

这是我的代码:

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)

    website = models.URLField(blank=True)
    picture = models.ImageField(upload_to="profile_images", blank=True)

    def __str__(self):
        return self.user.username

forms.py

class UserForm2(forms.ModelForm):

    class Meta:
        model = User
        fields = ('username', 'email', 'first_name', 'last_name')

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('website', 'picture')

views.py

@login_required
def update_user(request):

    try:
        user_profile = UserProfile.objects.get(user=request.user)
    except UserProfile.DoesNotExist:
        return HttpResponse("invalid user_profile!")

    if request.method == "POST":
        update_user_form = UserForm2(data=request.POST, instance=request.user)
        update_profile_form = UserProfileForm(data=request.POST, instance=user_profile)

        if update_user_form.is_valid() and update_profile_form.is_valid():
            user = update_user_form.save()
            profile = update_profile_form.save(commit=False)
            profile.user = user

            if 'picture' in request.FILES:
                profile.picture = request.FILES['picture']

            profile.save()

        else:
            print(update_user_form.errors, update_profile_form.errors)
    else:
        update_user_form = UserForm2(instance=request.user)
        update_profile_form = UserProfileForm(instance=user_profile)

    return render(request,
            'userprofile/update_user.html',
            {'update_user_form': update_user_form, 'update_profile_form': update_profile_form}
            )

update_user.html

<form id="update_user_form" method="POST" action="/userprofile/update_user/">
    {% csrf_token %}
    {{ update_user_form.as_p }}
    {{ update_profile_form.as_p }}
    <img src="{{ update_profile_form.instance.picture.url }}" />
    <br />
    <input type="SUBMIT" name="submit" value="Update"/>
</form>

我怎样才能让它正常工作?

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    要上传文件,您应该将enctype 属性添加到&lt;form&gt; 标签:

    <form id="update_user_form" method="POST" action="/userprofile/update_user/"
                                enctype="multipart/form-data">
    

    【讨论】:

      猜你喜欢
      • 2018-01-28
      • 2011-11-07
      • 2014-09-28
      • 2011-03-03
      • 2017-09-12
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多