Получение старого изображения пользователя, если изображение не выбрано - PullRequest
0 голосов
/ 29 января 2019

У меня есть форма, которая принимает данные пользователя, такие как биография, изображение профиля, пол и т. Д., И после отправки создает новую строку о пользователе или обновляет существующую строку.Это будет работать, только если пользователь загрузит изображение.Если для изображения профиля не загружено ни одного изображения, форма не отправляется.Как сделать так, чтобы, если пользователь не загружал изображение профиля, он сохранял предыдущее изображение профиля пользователя и все еще отправлял?

Вот мой код:

class ProfileSettings(UpdateView):
    model = Profile
    template_name = 'blog/settings.html'
    form_class = ProfileForm
    success_url = reverse_lazy('blog:settings')

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST, request.FILES)

        if form.is_valid():
            bio = form.cleaned_data['bio']
            gender = form.cleaned_data['gender']
            avatar = form.cleaned_data['avatar']

            Profile.objects.update_or_create(user=self.request.user, defaults={'avatar':avatar, 'bio':bio, 'gender':gender})

        return HttpResponseRedirect(self.success_url)

1 Ответ

0 голосов
/ 29 января 2019

Я дам вам быстрый и грязный - 3 места, чтобы решить эту проблему:

  1. Javascript - сообщите форме, какие поля являются обязательными, и предварительно заполните, если имя пользователя уже существует (изобласти видимости из вашего вопроса, но просто выбрасываю ее туда)
  2. В конечной точке API (кажется, это подход, к которому вы стремитесь)
  3. В вашей модели (реализуйте пользовательскую функцию сохранения, котораясмотрит, если новое, и сравнивает начальное значение с последующим значением)

Я дам дамп вариантов 1 и 3, потому что они не имеют отношения к вашему вопросу, как было задано.Я предполагаю, что пользователь уникален для каждого профиля.И я предполагаю, что в настоящее время поле аватара требуется.Если вы установили это значение как необязательное, тогда в форме сообщения должно быть разрешено нулевое значение для аватара - Как сделать FileField в django необязательным? .Вы можете подумать, но я не хочу, чтобы это поле было возможно пустым - вы всегда можете принудительно установить, что при первой публикации сообщения поле устанавливается через саму конечную точку API.Если вы сделаете это поле необязательным, то форма будет публиковаться, но вы, возможно, захотите быть более явным с помощью .update_or_create, фактически проверив, чтобы увидеть, существует ли объект уже, и если это так, требуется поле или, если нет, подтвердить, что поле установлено.

...