In the update template my form isnt getting prepopulated however the functionality of updating is working fine. the form stays empty when i am trying to parse an instance of a specific ID
My view.py :
def update_component(request, pk):
component = Component.objects.all()
component_id = Component.objects.get(id=pk)
form = ComponentModelForm(instance=component_id)
if request.method == 'POST':
form = ComponentModelForm(request.POST, instance=component_id)
if form.is_valid():
form.save()
return HttpResponseRedirect(request.path_info)
context = {
'components': component,
'form': ComponentModelForm(),
'component_id':component_id,
}
return render(request, 'update_component.html', context)
The form in template :
<div>
{% load widget_tweaks %}
<form method='POST' action=''>
{% csrf_token %}
<div style="width:50%;" >
<br>
<span >Name</span>
{% render_field form.name %}
<span >Manufacturer</span>
{% render_field form.manufacturer %}
<span >Model</span>
{% render_field form.model %}
<span >Serial Number</span>
{% render_field form.serial_number %}
<span >Price</span>
{% render_field form.price %}
<span >Note</span>
{% render_field form.note %}
{% render_field form.parent %}
<input type="submit" value='Update Component' />
</div>
<div>
<img src="{{ component_id.image.url }}" />
{% render_field form.image %}
</div>
</form>
</div>
urls.py :
from django.urls import path
from . import views
appname = 'maintenance'
urlpatterns = [
path('', views.index , name='maintenance'),
path('<int:pk>/update/', views.update_component , name='update_component'),
]
CodePudding user response:
This is just a typo, instead of
context = {
'components': component,
'form': ComponentModelForm(),
'component_id':component_id,
}
it should be
context = {
'components': component,
'form': form, # <--- HERE !!!!
'component_id':component_id,
}
