【问题标题】:Django UpdateView with ImageField带有 ImageField 的 Django UpdateView
【发布时间】:2020-04-18 03:16:48
【问题描述】:

当我尝试更新模型上的图像时,由于某种原因没有通过表单验证。 我也试过不使用PIL库更新它,还是不行。

class UpdateProfile(UpdateView):
    template_name = 'dashboard/edit-profile.html'
    form_class = UserForm
    success_url = None

    def get_object(self, queryset=None):
        return User.objects.get(username=self.kwargs['username'])

    def form_valid(self, form):
        self.instance = form.save(commit=False)
        user = self.get_object()
        user.full_name = self.instance.full_name
        user.username = self.instance.username
        user.email = self.instance.email
        user.description = self.instance.description
        im = Image.new(self.instance.main_image)
        user.profile_image = im
        user.ig = self.instance.ig
        user.fb = self.instance.fb
        user.pinterest = self.instance.pinterest
        user.twitter = self.instance.twitter
        user.save()
        return render(self.request, self.template_name, self.get_context_data())

型号Image属性

    profile_image = models.ImageField(upload_to=save_profile_image,
                                     default='/static/img/blog/avatars/user-01.jpg')

def save_profile_image(instance, filename):
    if instance:
        return '{}/{}'.format(instance.id, filename)

来自 html 的表单数据。

                <form action="" class="tm-edit-product-form" method="post" enctype="multipart/form-data">
<div class="custom-file mt-3 mb-3">
                                <input id="fileInput" type="file" name="main_image" style="display: none"
                                       accept="image/*"/>
                                {{ form.profile_image }}
                            </div>

</form>

无论如何,POST 请求通过但对象没有更新。问题在于ImageField。为什么它不能正常工作?

【问题讨论】:

    标签: django django-views python-imaging-library django-class-based-views


    【解决方案1】:

    您是否尝试将模型绑定到更新视图: https://docs.djangoproject.com/en/3.0/ref/class-based-views/generic-editing/#updateview

    那么你不再需要 form_valid

    class UpdateProfile(UpdateView):
        template_name = 'dashboard/edit-profile.html'
        model = User
        form_class = UserForm
        success_url = None
    
        def get_object(self, queryset=None):
            return User.objects.get(username=self.kwargs['username'])
    

    【讨论】:

    • 是的,我有,如果我覆盖get_object,我是否绑定它并不重要
    • 好的,所以您删除了 form_valid 覆盖并尝试过?你也有.instance.main_imageform_valid 你能检查它的值吗?不应该是instance.profile_image
    • 我发现了错误,在我的forms.py 中,我附加了自定义jscss。我已经删除了它们并尝试了基本的form.FileInput() field 并且它工作了。
    • 我的下一个问题应该是显示表单 xD 很高兴你发现了错误
    猜你喜欢
    • 2015-10-11
    • 2016-03-15
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2018-05-10
    • 2013-07-07
    相关资源
    最近更新 更多