Home > Blockchain >  My ModelForm isn't getting auto-populated
My ModelForm isn't getting auto-populated

Time:01-13

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,
    }   
  •  Tags:  
  • Related