Django UpdateView с ImageField - PullRequest
       18

Django UpdateView с ImageField

0 голосов
/ 18 апреля 2020

Проверка формы не проходит по какой-то причине, когда я пытаюсь обновить изображение на моей модели. Я также пытался обновить его, не используя библиотеку 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. Почему, черт возьми, это не работает так, как должно?

1 Ответ

0 голосов
/ 18 апреля 2020

Вы пытались привязать модель к просмотру обновлений: 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'])
...