python - How do I access form fields in a template in Django? -


i using model-based form create form based off data model. insert part works fine, trying "edit" page. problem need id/primary key of original model post action , documentation (and previous thread here) seems have told me try both form.id , form.instance.id, neither seem work. ideas or appreciated!

here's template:

<form action="/athlete/edit/{{ form.mod_athlete.id }}" method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="submit" /> </form> 

here's part of view:

def changeathlete(request, athlete_id):         if request.method == 'post': # if form has been submitted...                 form = athleteform(request.post) # form bound post data                 if form.is_valid(): # validation rules pass                         form.save()                         return httpresponse("athlete changed!") # redirect after post         else:                 mod_athlete = athlete.objects.get(pk=athlete_id)                 form = athleteform(instance=mod_athlete) # unbound form          return render_to_response('edit.html', {                 'form': form,         }, context_instance=requestcontext(request)) 

any appreciated , if need more info, i'll happy provide it. i, of course, new django , real programming i'm building off tutorial , learn. thanks!

update

relevant parts of urls.py:

url(r'^$', 'rosters.views.index', name='index'), url(r'^admin/', include(admin.site.urls)), url(r'^athlete/add/', 'rosters.views.createathlete'), url(r'^athlete/edit/(?p<athlete_id>\d+)/', 'rosters.views.changeathlete'), url(r'^meet/(?p<meet_slug>\w+)/', 'rosters.views.meetindex'), url(r'^meet/(?p<meet_slug>\w+)/(?p<occurence_name>\w+)/', 'rosters.views.occurenceindex'), url(r'^meet/(?p<meet_slug>\w+)/(?p<occurence_name>\w+)/events/', 'rosters.views.meetevents'), url(r'^meet/(?p<meet_slug>\w+)/(?p<occurence_name>\w+)/events/(?p<event_id>\w+)/', 'rosters.views.addathletes'), 

if staying on same page during edit process(for example http://localhost:8000/athlete/edit/1234/), don't need specify in action attribute on form, following should work fine:

<form action="" method="post">{% csrf_token %}   {{ form.as_p }}   <input type="submit" value="submit" /> </form> 

your form should pass in instance object in post case:

def changeathlete(request, athlete_id):     mod_athlete = athlete.objects.get(pk=athlete_id)     if request.method == 'post': # if form has been submitted...         form = athleteform(request.post, instance=mod_athlete) # form bound post data         if form.is_valid(): # validation rules pass             form.save()             return httpresponse("athlete changed!") # redirect after post     else:         form = athleteform(instance=mod_athlete) # unbound form      return render_to_response('edit.html', {             'form': form,     }, context_instance=requestcontext(request)) 

Comments