2015-10-14 185 views
1

提交表单(输入)后,它将重定向到另一个页面(结果)并在此结果页面中显示表单信息。为什么提交后Django表单数据无法显示

现在的问题是提交的信息不会显示在结果页面中。

我怀疑原因是因为在结果'views.py,我想显示提交的形式从输入,但表单的数据没有保存或我不应该从模型中获取数据,我应该获取从视图中的数据,所以它不能显示该表:

上下文[“输入”] = Input.objects.all()

请纠正我,如果我的猜测是正确与否。预先感谢您的建议。

输入 - models.py

class Input(models.Model): 

    company=models.CharField(max_length=100,default='Empty') 
    region=models.CharField(max_length=100,default='Empty') 
    start_date=models.DateField(auto_now=False, auto_now_add=False,default='Empty') 
    end_date=models.DateField(auto_now=False, auto_now_add=False,default='Empty') 

输入 - 形式

class Inputform(forms.ModelForm): 
    company=forms.CharField() 
    regionlist = forms.ModelChoiceField(queryset=Result.objects.values('region').distinct()) 
    start_date=forms.DateField(widget=DateInput(),required=True) 
    end_date = forms.DateField(widget=DateInput(),required=True) 

    class Meta: 
     model = Input 
     fields = ('company', 'region','start_date','end_date') 
     widgets = { 
      'start_date': forms.DateInput(attrs={'class':'datepicker'}), 
      'end_date': forms.DateInput(attrs={'class':'datepicker'}), 
     } 

输入 - 的HTML代码的一部分

<form action="result_list/" method="post">{% csrf_token %} 

     <!--enter company--> 
     <div class="field"> 
      <p>Company:<input type="text" name="Company" value="{{company}}"/> 
     </div> 


     <!--select region--> 
     <div class="field" > 
      <label> Select the Region: 
      {{ form.regionlist }} 
       {% for region in form.regionlist.choices %} 
        <option value="{{ val }}" {% ifequal data.val val %}selected {% endifequal %}></option> 
       {% endfor %} 
      </label> 
     </div> 
    .... 
    <div class="fieldWrapper"> 
     <p><input type="submit" value="Submit" /></p></div> 
</form> 

输入--views

from django.http import HttpResponseRedirect 
from django.shortcuts import render,render_to_response,get_object_or_404 
from inputform.forms import Inputform 
from inputform.models import Input 
from result.models import Result 
from django.views.decorators.csrf import csrf_exempt 
from django.views.generic.list import ListView 

@csrf_exempt 

def input(request): 
    if request.method == 'POST': 
     form = Inputform(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      print (cd['company']) 
      form.save() 
      return redirect('result') 

网址

from inputform import views 
from django.views.generic.list import ListView 
from inputform.views import input 
from django.views.generic import RedirectView 
    urlpatterns = patterns('', 
    url(r'^result_list/$',ResultView.as_view(),name='result'), 
    (r'^input/$', RedirectView.as_view(url='/result_list/')), 
     } 

结果--views.py

class ResultView(ListView): 
    context_object_name = 'result_list' 
    template_name = 'result_list.html' 
    queryset = Result.objects.all() 

def get_context_data(self, **kwargs): 
     context = super(ResultView, self).get_context_data(**kwargs) 
     context['input'] = Input.objects.all() 
     return context 

结果 - HTML

{% for input_object in input %} 
     <table border="1" cellpadding="1"> 
     <tr> 
      <td align="left">Company</td> 
      <td>{{input_object.company}}</td> 
     </tr> 

     <tr> 
      <td align="left">Region</td> 
      <td>{{input_object.region}}</td> 
     </tr> 
      ... 
     </table> 
{% endfor %} 

回答

2

你的代码看起来相当混乱。它不清楚,你最初如何将空表单传递给输入模板。

但是,问题可能会出现,因为您不会将整个表单传递到您的模板,但只有{{ form.regionlist }}。所以你的输入不能写任何数据到数据库。

如您对regionlist字段所做的那样,逐个呈现整个{{ form }}或每个字段。

此外,如果它不实际覆盖models.py中的原始字段,则不需要在forms.py中的dublicate模型字段。

+0

html代码只是片段,我已将所有字段传递给模板。所以我认为还有其他一些原因。 –

1

的根本原因实际上是url.py:

应该删除 “(R '^输入/ $',RedirectView.as_view(URL = '/ result_list /'))”,只放重定向在views.py中就足够了。

相关问题