обработка формы django и отправка вопросов - PullRequest
1 голос
/ 04 августа 2011

Впервые в Django. Я извлекаю данные из базы данных mysql, которые отображаются в форме. Пользователю необходимо выбрать один из вариантов выбора формы.Представление обрабатывает данные, которые были отправлены из формы путем запроса к базе данных, и должна отправлять результаты в формате csv или в виде графика. Я пытаюсь создать файл csv с результатами запроса, но отправка не работает.views.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 %}

Спасибо за помощь.

1 Ответ

1 голос
/ 04 августа 2011

Кажется, вам не хватает тега формы вокруг вашей формы!

try

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