为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Django 的用户扩展模型中上传个人资料图片

如何在 Django 的用户扩展模型中上传个人资料图片

海绵宝宝撒 2023-09-02 16:12:15
将封面图像上传到 Django 的用户扩展模型时,我没有收到任何错误,但我看不到我在做什么,因为它没有给出任何错误,甚至没有更新我的模型。不过,我可以通过使用这个概念来更改简介,但我无法将封面图像更新为我的用户扩展模型。这里我给出源码models.pyclass Memer(models.Model):    user = models.OneToOneField(User, on_delete=models.CASCADE)    mobile = models.CharField(max_length=16, blank=True, null=True)    bio = models.CharField(max_length=150, blank=False, null=False, default="Hey! I'm new here.")    cover = models.ImageField(upload_to='cover-images/%y/%m/%d/', default='cover-images/default/memerrank-bg.jpg', blank=False, null=False)    profile = models.ImageField(upload_to='profile-images/%y/%m/%d/', default='profile-images/default/memerrank-no-dp.jpg', blank=False, null=False)    def __str__(self):        return str(self.user)forms.pyclass UpdateCoverImageForm(forms.ModelForm):    class Meta:        model = Memer        fields = ['cover']views.pydef profile(request, username):    try:        user = User.objects.get(username=username)        user_ = User.objects.filter(username=username)        memer = Memer.objects.filter(user=user_[0].id)    except User.DoesNotExist:        raise Http404("Memer does not exist.")    context = {        'user_': user_,        'memer': memer,    }
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

这里的问题在于views.py

1.ModelForm构造函数中的前两个位置参数是数据和文件。您应该转到data第一个和files第二个。

2.如果此处没有文件字段,则不进行任何更改

bioForm = EditBioForm(data=request.POST, instance=request.user.memer)

3.但是这里做出改变

coverImageForm = UpdateCoverImageForm(data=request.FILES, instance=request.user.memer)

coverImageForm = UpdateCoverImageForm(request.POST, request.FILES, instance=request.user.memer)

并且 Boom 您的文件将得到更新。


查看完整回答
反对 回复 2023-09-02
?
12345678_0001

TA贡献1802条经验 获得超5个赞

您不会收到任何错误,只是因为代码完全按照您的指示执行。代码永远不会进入 elif 语句,这是因为“if bioForm.is_valid():”语句将始终返回 True。我建议你做这样的事情


if request.method == "POST":

        bioForm = EditBioForm(data=request.POST, instance=request.user.memer)

        coverImageForm = UpdateCoverImageForm(data=request.FILES, instance=request.user.memer)

        if bioForm.is_valid() and coverImageForm.is_valid():

            memer_ = bioForm.save(commit=False)

            memer_ = coverImageForm.save(commit=False)

            memer_.save()

            memer_.save()

            messages.success(request, "Profile successfully updated your profile")

            return redirect('/profile/'+user_[0].username)

        else:

            messages.error(request, "Something wrong happend")

            return redirect('/profile/'+user_[0].username)

    return render(request, 'profile.html', context)

如果您希望一次更新一个字段,那么我建议您为每个字段制作不同的视图。


查看完整回答
反对 回复 2023-09-02
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信