Django - Как сделать текущий объект "атрибутом ImageField" в качестве предопределенного значения в представлении Update_Object?

Я создаю представление обновления с использованием django-form для обновления одного из моих объектов, у которого есть следующие поля:

class Object(models.Model):
    name = models.CharField(max_length=40)
    logo = models.ImageField(upload_to='object_logo/')
    text_1 = models.TextField()
    text_2 = models.TextField()

Итак, я создал следующую форму в файле forms.py:

class ObjectForm(forms.ModelForm):
    class Meta:
        model = Object
        fields = [
            'name',
            'logo',
            'text_1',
            'text_2',
        ]
        labels = {
            'name': 'Name',
            'logo': 'Logo',
            'text_1': 'Text 1',
            'text_2': 'Text 2',
        }

и определил следующее представление под названием update_object:

def update_object(request, value):
    object = get_object_or_404(Object, pk=value)
    if request.method == "POST":
        form = ObjectForm(request.POST, request.FILES)
        if form.is_valid():
            object.name = form.cleaned_data['name']
            object.logo = form.cleaned_data['logo']
            object.text_1 = form.cleaned_data['text_1']
            object.text_2 = form.cleaned_data['text_2']
            object.save()
            return HttpResponseRedirect(reverse('myApp:detail_object', args=(value, )))
    else:
        form = ObjectForm(
            initial={
                'name': object.name,
                'logo': object.logo,
                'text_1': object.text_1,
                'text_2': object.text_2,
            }
        )
    context = {'object': object, 'form': form}
    return render(request, 'myApp/update_object.html', context)

Моя проблема в том, что даже с "начальным" значением, установленным для logo, я должен выбирать изображение каждый раз, когда я буду обновлять свой объект (иначе я получаю страницу update_object с сообщением "This field is required").

Есть ли способ сделать текущий object.logo предопределенным значением ввода в моей ObjectForm в представлении update_object?

Я уже пытался установить blank = True в поле модели логотипа (что было плохой идеей). Я также думал сделать альтернативный условный код для form.is_valid(), но не знаю, как это сделать.

Обновите файл forms.py следующим образом:

class ObjectForm(forms.ModelForm):
    class Meta:
        model = Object
        fields = '__all__'

... и views.py:

def update_object(request, value):
    object = get_object_or_404(Object, pk=value)
    if request.method == "POST":
        form = ObjectForm(request.POST, request.FILES, instance=object)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('myApp:detail_object', args=(value, )))
    else:
        form = ObjectForm(instance=object)
    context = {'object': object, 'form': form}
    return render(request, 'myApp/update_object.html', context)

Можно сделать так (более чисто)

  • В случае, если вы поделитесь кодом вашего шаблона
Вернуться на верх