【问题标题】:Why the django form data cannot display after submitting为什么django表单数据提交后无法显示
【发布时间】:2016-01-12 19:23:17
【问题描述】:

提交表单(输入)后,它会重定向到另一个页面(结果),并在这个结果页面中显示表单信息。

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

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

context['input'] = Input.objects.all()

如果我的猜测是正确的,请纠正我。提前感谢您的建议。

input-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 %}

【问题讨论】:

    标签: python html django


    【解决方案1】:

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

    但是,问题可能会出现,因为您没有将整个表单传递给您的模板,而只是 {{ form.regionlist }}。因此,您的输入无法将任何数据写入 db。

    渲染整个 {{ form }} 或每个字段,就像您对 regionlist 字段所做的那样。

    此外,如果 forms.py 中的模型字段实际上并没有以某种方式覆盖 models.py 中的原始字段,则您不需要复制模型字段。

    【讨论】:

    • html代码就是sn-p,我把所有的字段都传给了模板。所以我认为还有其他一些原因。
    【解决方案2】:

    根本原因其实在url.py中:

    应该删除"(r'^input/$', RedirectView.as_view(url='/result_list/')),",只需要在views.py中加入redirect即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 2015-04-27
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 2017-04-09
      • 2010-12-14
      相关资源
      最近更新 更多