Обновление поля FileField в форме Django
Играюсь с FileFiled
и пытаюсь обновить форму. Я думаю, что моя проблема исходит из views.py.
У меня есть шаблон, в котором я вижу продукт, и у меня есть возможность обновить продукт, нажав на кнопку обновления.
При нажатии на кнопку обновления я перенаправляюсь на форму, где я могу обновить продукт.
шаблон
{% for TermsAndConditions in commercial_list %}
<a class="btn btn-outline-secondary" href="{% url 'update-commercial' TermsAndConditions.id %}">Update
</a>
{% endfor %}
templateform.py
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<h6>Upload terms</h6>
{{ form.attachment| as_crispy_field}}
{% if url %}
<p>Uploaded file <a href="{{url}}">{{url}}</a></p>
{%endif%}
<button type="submit" value="Submit" id="profile-btn" class="btn btn-primary custom-btn">Update</button>
</form>
Моя обычная форма загрузки (без FileField
) выглядит так:
просмотров (без FileField
)
def update_commercial(request, termsandconditions_id):
commercials = TermsAndConditions.objects.get(pk=termsandconditions_id)
form = TermsAndConditionsForm(request.POST or None, instance=commercials )
if form.is_valid():
form.save()
return redirect('list-commercial')
return render(request, 'main/update_commercial.html',{'form':form,'commercials':commercials})
Добавив FileField
, я решил сделать что-то вроде этого:
просмотров (с FileField
)
def update_commercial(request, termsandconditions_id):
commercials = TermsAndConditions.objects.get(pk=termsandconditions_id)
form = TermsAndConditionsForm(request.POST or None, request.FILES ,instance=commercials ) #the change being request.FILES
if form.is_valid():
form.save()
return redirect('list-commercial')
return render(request, 'main/update_commercial.html',{'form':form,'commercials':commercials})
Проблема в том, что когда я делаю это, кнопка обновления в шаблоне становится недействительной (она не перенаправляет на форму обновления).
Думаю, моя проблема в том, как обрабатывать or None
и request.FILES
вместе. Я пробовал различные комбинации, но ни одна не сработала. Надеюсь, кто-нибудь сможет пролить свет.
(Я добавил модели и url файлы, так как не думаю, что проблема в них, и не хотел делать это сообщение длиннее, чем оно должно быть, но не стесняйтесь, дайте мне знать)
Ок, в конце концов, разобрался.
Размещаю ответ на всякий случай для тех, кому он нужен.
Мне нужно было повторить or None
для request.FILES.
def update_commercial(request, termsandconditions_id):
commercials = TermsAndConditions.objects.get(pk=termsandconditions_id)
form = TermsAndConditionsForm(request.POST or None, request.FILES or None,instance=commercials )
if form.is_valid():
form.save()
return redirect('list-commercial')
return render(request, 'main/update_commercial.html',{'form':form,'commercials':commercials})