【问题标题】:django form processing and submit issuesdjango 表单处理和提交问题
【发布时间】:2011-08-04 11:20:12
【问题描述】:

Django 新手。我从 mysql db 中检索显示在表单中的数据。用户需要在表单选项中进行选择。该视图通过查询数据库来处理从表单发布的数据,并且应该以 csv 格式或图形形式发送结果。我现在正在尝试使用查询结果创建一个 csv 文件,但提交不起作用。 视图.py:

    def monitor(request):   
       if request.method == 'POST' :
        forms = ServicesForm(request.POST)
        if forms.is_valid():
            service = forms.cleaned_data['service']
            scale = forms.cleaned_data['scale']
            datatype = forms.cleaned_data['datatype']
            starttime = forms.cleaned_data['starttime']
            endtime = forms.cleaned_data['endtime']

            id = Servicenames.objects.raw('SELECT id FROM servicenames WHERE          servicename        =  ' + service )
            # process and create query  Select "dtime",datatype where "scale" = scale and "dtime' between starttime and endtime
            #                                  and service_id                  

            servicestats = Servicestats.objects.raw('SELECT distinct dtime,'+ datatype + ' FROM servicestats WHERE scale = '+ scale + ' AND dtime between '+ starttime + ' and '+ endtime + 'and service_id = '+ id.id)  
            response = HttpResponse(mimetype='text/csv') 
            response['Content-Disposition'] = 'attachment;filename="export.csv"'         
            writer = csv.writer(response)
            for s in servicestats:
                writer.writerow([s.dtime,s.datatype])

            return response

    else:
        forms =  ServicesForm


    return render_to_response('monitor/monitor.html', {'forms':forms},
       context_instance = RequestContext(request)) 



     models.py :

     class Servicenames(models.Model):
    id = models.IntegerField(primary_key=True)
    servicename = models.CharField(unique=True, max_length=255)
    class Meta:
        db_table = u'servicenames'
    def __unicode__(self):
        return self.servicename



    class Servicestats(models.Model):
    #  service_id = models.IntegerField(primary_key=True)
    service_id = models.ForeignKey(Servicenames)
    dtime = models.DateTimeField(primary_key=True)
    scale = models.IntegerField(primary_key=True)
    cnt = models.IntegerField()
    min = models.FloatField()
    max = models.FloatField()
    avg = models.FloatField()
    threenines = models.FloatField()


    class Meta:
        db_table = u'servicestats'


   forms.py :


    class ServicesForm(forms.Form):
    services=Servicenames.objects.all()
    service = forms.ModelMultipleChoiceField(queryset=services,widget=forms.Select(attrs={'class':'colr',}))
    scales = Servicestats.objects.values_list('scale', flat=True).distinct()
    scale = forms.ModelChoiceField(queryset=scales,widget=forms.Select(attrs={'onchange': 'this.form.submit();'}))
    DATATYPE_CHOICES = (
    ('cnt', 'cnt'),
    ('min', 'min'),
    ('max', 'max'),
    ('avg', 'avg'),
    ('threenines','threenines'),
)
    datatype = forms.ChoiceField(choices = DATATYPE_CHOICES,widget=forms.Select(attrs={'onchange': 'this.form.submit();'})) 

    starttime = forms.DateTimeField(initial = datetime.now) 
    endtime = forms.DateTimeField(initial = datetime.now)   


   template.html :




   % extends "bbase.html" %}

{% block extrascripts %}
$("#monitor").addClass("active")
{% endblock %}

{% block content %}
    <div class="main">
    <p>Welcome to the monitoring management system.</p>
    <p>Stay tuned for more details</p>
    </div>
    <div>{{forms.service}}<span id="selection"><--Select services</span></div> 
    <div>{{forms.scale}}<span id="selection"><--Select resolution</span></div> 
    <div>{{forms.datatype}}<span id="selection"><--Select data type</span></div> 
    <div>{{forms.starttime}}<span id="selection"><--Select start time</span></div> 
    <div>{{forms.endtime}}<span id="selection"><--Select end time</span></div> 
    <input type = "submit" value = "Submit">

{% endblock %}

感谢您的帮助。

【问题讨论】:

  • 什么不起作用?你有追溯吗?请向我们显示错误消息。上面的代码太长了。
  • 没有错误消息。表单显示正确(开始时间、结束时间、数据类型、服务和规模的下拉小部件选择)但是当我提交表单时没有任何反应。
  • 您了解这个问题吗?目前的主要问题是提交
  • 您可以将“assert False”添加到您的代码中,以找到执行的路径。有几种返回方式。只有一个返回 csv-Response。

标签: django django-forms django-views


【解决方案1】:

您的表单周围似乎缺少form tag

试试

<form action='' method='post'>{% csrf_token %}
    ...your form html...
    ...inputs...
    ...submit...
</form>

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2019-06-05
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多