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
Post a Comment