Multiple forms on one page - one not working: Django -
i trying have 2 forms on (paginated) page.
display fine if hit "save" on relevance_form, can see change in admin. event_form, however, nothing happens , after days of trying figure out , not finding answer, i'm posting here:
why eventrecordform not being submitted?
here form classes:
class eventrecordform(modelform): """docstring eventrecordform""" def __init__(self, *args, **kwargs): super(eventrecordform, self).__init__(*args, **kwargs) self.fields['event_date'].required = true self.fields['location'].required = true self.fields['anti_gov'].required = true class meta: model = eventrecord exclude = ('article', 'coder', 'last_updated','country',) def __unicode__(self): return u'eventrecordform' class relevancecodingrecordform(modelform): """(articlemetainforecordform description)""" class meta: model = relevancecodingrecord exclude = ('article', 'coder', 'coding_date','last_updated', 'screened', 'classified',) def __unicode__(self): return u"relevancecodingrecordform" my view:
def assignment(request, pk): """view each assignment""" if request.user.is_authenticated(): #### correct articles assignment = get_object_or_404(assignment, pk=pk) country = assignment.country.ccode start_date = assignment.start_date end_date = assignment.end_date articles = article.objects.filter(country=country).filter(pub_date__range=(start_date,end_date)) paginator = paginator(articles, 1) #### pagination #### page = request.get.get('page') try: articles = paginator.page(page) except pagenotaninteger: articles = paginator.page(1) except emptrypage: articles = paginator(page(paginator.num_pages)) #### forms #### if request.method == 'post': if 'event' in request.post: event_form = eventrecordform(request.post, prefix='event') if event_form.is_valid(): obj = event_form.save(commit=false) obj.article = paginator.page(page).object_list[0] # obj.classified = true need figure out obj.coder = request.user.coder obj.country = paginator.page(page).object_list[0].country obj.save() redirect_to = "?page=%s" % page # return httpresponseredirect(redirect_to) return httpresponseredirect(reverse ('coding:assignment', args=(pk,))) relevance_form = relevancecodingrecordform(prefix='relevance') elif 'relevance' in request.post: relevance_form = relevancecodingrecordform(request.post, prefix='relevance') if relevance_form.is_valid(): obj = relevance_form.save(commit=false) obj.article = paginator.page(page).object_list[0] obj.screened = true obj.coder = request.user.coder obj.save() redirect_to = "?page=%s" % page #return httpresponseredirect(redirect_to) return httpresponseredirect(reverse ('coding:assignment', args=(pk,))) event_form = eventrecordform(prefix='event') else: event_form = eventrecordform(prefix='event') relevance_form = relevancecodingrecordform(prefix='relevance') else: print error return render(request, 'coding/assignment.html', {'articles':articles,'assignment':assignment,'event_form':event_form,'relevance_form':relevance_form}) and template:
<div id="coding"> <div id="relevance"> {% if assignment.screening == true %} <form action="" method="post" accept-charset="utf-8" id="form"> {% csrf_token %} {{ relevance_form.as_p }} <p><input type="submit" name="relevance" value="save →"></p> </form> {% endif %} </div> <div id="classifying"> {% if assignment.classifying == true %} <form action="" method="post" accept-charset="utf-8" id="form"> {% csrf_token %} {{ event_form.as_p}} <p><input type="submit" name="event" value="save →"></p> </form> {% endif %} </div> <div id="pagination"> <span class="step-links"> {% if articles.has_previous %} <a href="?page={{ articles.previous_page_number }}">previous</a> {% endif %} <span class="current"> article {{ articles.number }} of {{ articles.paginator.num_pages }}. </span> {% if articles.has_next %} <a href="?page={{ articles.next_page_number }}">next</a> {% endif %} </span> </div> i tried display form fields of event_form in 2 columns calling them 1 one suggested here, did not work either.
i'm stumped here, i'm sure it's minor thing i'm missing, after staring @ code days on end, don't see anymore. appreciated!
you have validation error, you'll never see it, because reinstantiate relevance_form, without passing post data, if form not valid. don't that, let form have fall through render call.
Comments
Post a Comment