Django формы: Редактировать поле изображения (удалить и показать существующие) - PullRequest
5 голосов
/ 04 ноября 2019

Я пытаюсь получить форму модели Django с полем изображения, но у меня есть две проблемы:

  1. Я не знаю, как показать текущее имя изображения на входе
  2. Я не знаю, как предоставить способ удаления изображения

форм :

class CityLogoForm(forms.ModelForm):
    logo = forms.ImageField(widget=forms.FileInput(attrs={'class': 'custom-file-input'}), required=False)

    class Meta:
        model = City
        fields = ['logo']

просмотров :

def management_form_general(request, city_slug):
    city = City.objects.get(slug=city_slug)
    if request.method == 'POST':
        logo_form = CityLogoForm(request.POST, request.FILES,  instance=city)
        if logo_form.is_valid():
            logo_form.save()

    else:
        logo_form = CityLogoForm(instance=city)

    return render(request, 'management/form/city_general.html', {'city': city, 'logo_form': logo_form})

html :

<form action="" enctype="multipart/form-data" method="post">
    <div class="form-group row">
        <label for="id_city" class="col-sm-2 col-form-label form_title">{{ logo_form.logo.label }}</label>
        <div class="custom-file">
            {{ logo_form.logo }}
            <label class="custom-file-label" for="{{ logo_form.logo.id_for_label }}" data-browse="Choisir Image">{{ logo_form.logo.label }}</label>
        </div>
    </div>
</form>

У меня есть скрипт, меняющий метку, когда пользователь загружает что-то, но я не могу найти способ получитьтекущее значение для полей изображения (для обычных оно правильно заполнено). Поскольку он, кажется, не заполняет ввод, он, кажется, игнорирует, когда ввод пуст, и поэтому никогда не удаляет текущий логотип.

Редактировать: если возможно, ответ должен быть выполнимым в цикле for над formset_factory

1 Ответ

3 голосов
/ 13 ноября 2019

Я не знаю, как отобразить текущее имя изображения во входных данных

Добавить к вам модель свойства, которое возвращает имя файла изображения, если поле изображения не пустое,например:

import os

class MyModel(models.Model):

    image = models.ImageField(...)

    @property
    def image_name(self):
        return os.path.basename(self.image.path) if self.image else ''

, затем в HTML-шаблон добавьте {{ your_model.image_name }}, где вам нужно отобразить имя текущего изображения.

Я не знаю, как предоставить способудалить изображение

Недавно у меня была такая же проблема, и я решил ее, добавив скрытый флажок clear_image в html (проверяя его с помощью js, когда пользователь нажал кнопку очистки изображения), чем я занималсяПолученное значение в форме Джанго.

...