2013-05-10 128 views
0

我想在(分页)页面上有两种形式。
它们显示得很好,如果我在relevance_form上点击“保存”,我可以在管理中看到这个改变。 然而,对于event_form,没有任何反应,经过几天的努力找出答案,我没有找到答案,我在这里发布:
为什么我的EventRecordForm不被提交?在一个页面上的多个表单 - 一个不工作:Django

这里是我的Form类:

class EventRecordForm(ModelForm): 
"""docstring for 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" 

笔者认为:

def assignment(request, pk): 
    """View for each assignment""" 
    if request.user.is_authenticated(): 

     #### Get 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 to figure this 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}) 

我的模板:

<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 &rarr;"></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 &rarr;"></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> 

我也试图显示表单字段event_form in two co如建议here那样通过一对一地打电话给他们,但那也不起作用。
我真的很难过,我敢肯定,这只是我错过的一件小事,但在盯着这段代码几天后,我什么都看不到了。 任何帮助,非常感谢!

回答

2

您可能有一个验证错误,但您永远不会看到它,因为如果表单无效,您将重新实例化relevance_form,而不传递POST数据。不要那样做,只要让你已经完成的表单进入渲染调用。

+0

真棒,谢谢! – LukasKawerau 2013-05-10 15:32:38

相关问题