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)
Можно сделать так (более чисто)
- В случае, если вы поделитесь кодом вашего шаблона