2011-08-04 15 views
1

Django.Iの新機能は、フォームに表示されるデータをmysql dbから取得します。ユーザーはフォームの選択肢から選択する必要があります。ビューは、DBからクエリを送信してフォームから投稿されたデータを処理し、結果をcsv形式またはグラフで送信する必要があります。クエリの結果を含むcsvファイルを作成しようとしていますが、送信は機能しません。 views.py:djangoフォームの処理と送信

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

を試してみてください?トレースバックを取得しますか?エラーメッセージを表示してください。上記のコードは長すぎます。 – guettli

+0

エラーメッセージはありません。フォームが正しく表示されています(starttinme、endtime、データ型、サービス、およびスケールのウィジェットの選択肢をドロップダウンします)。 – dave

+0

問題を理解しましたか?主な問題は現在サブミットです – dave

答えて

1

フォームの周りにform tagがありません。

は動作しません何

<form action='' method='post'>{% csrf_token %} 
    ...your form html... 
    ...inputs... 
    ...submit... 
</form> 
関連する問題