2009-09-27 5 views
7

Django ile yeni hayatımın ikinci günü, lütfen sorumun sadeliğini affedin.Acemi: Django: Şablona geçmeden önce Queryset'e hesaplanmış sonuçlar ekleme

URL'ler, görünümler, modeller ve tüm bu güzel şeyleri kullanarak bir web sayfasının içeriğini başarıyla görüntülediğim mevcut bir DB tablosuna (salt okunur erişim) sahibim.

Sahip olduğum meydan okuma, göstermem gereken tüm bilgileri içermiyor. Tablo, sütunlar, örnekleme, örnek değer, örnekleyici ile test sonuçlarını içerir. Bu sütunlardan ne hesapladığımı temel alarak farklı veriler göstermem gerekiyor.

Son hedefim, flotr kullanarak bu bilgiyi zaman serisi grafiği olarak görüntülemek. Şimdilik kimliği sadece bir web sayfasındaki bir tabloya gereken verileri dökümü için mutlu olur.

  • jssampletime,

    Ne Kimliği şablonuna geçmek ister ise (Yani sonuçta elde edilen verileri görselleştirmek) oluşturmadan jssampletime ve resultva sorun değil

- (sampletime tarih saat nesne javaScript dönemin dönüştürülür ms)

  • resultvalue (sampleresult iyi veya kötü olmasına dayalı samplevalue toplamı + gösterilir) def işlevlerini kullanarak lue. Bu işlevleri view.py

    'a ekleyeceğimi tahmin ediyorum. Yapmam gereken şey, see.py'de bir querySet üzerinde yineleme yapmam ve sonuçları şablona aktardığım sözlükler listesinde saklıyorum. Böyle bir şey (kod test edilmedi).

    views.py

    # views.py 
    # Sudo code to assit in asking the question 
    from django.shortcuts import render_to_response 
    from thing.reporter.models import Samples 
    
    def _datetime_to_js(sampletime): 
        #.. date conversion epoch magic 
        return jsd_result 
    
    def _rolling_sum(samplevalue,sampleresult): 
        #.. summing magic 
        return sum_result 
    
    def dumptable(request): # The def that is called by urls.py 
        object_list = Samples.objects.all() 
    
        list_for_template = [] 
        for row in object_list: 
         jssampletime = _datetime_to_js(row.sampletime) 
         resultvalue = _rolling_sum(row.samplevalue,row.sampleresult) 
         list_for_template.append({'jssampletime':jssampletime,'resultvalue':resultvalue}) 
    
        return render_to_response('tabledump.html', {'result_list': list_for_template}) 
    

    tabledump.html

    # tabledump.html template 
    {% block content %} 
        <h2>Results dumped to page for testing</h2> 
        <ul> 
        <table> 
        {% for result in result_list %} 
         <tr> 
         <td>{{ result.jssampletime }}</td> 
         <td>{{ result.resultvalue }}</td> 
         </tr> 
        {% endfor %} 
        </table> 
        </ul> 
    {% endblock %} 
    

    Ben bu işe ama Django MVC yolu ise emin değilim düşünüyorum.

    • Bir QuerySet sonucun üzerine interating tarafından views.py ihtiyaç sonucu hesaplamak, doğru ben mi?
    • sonucumu bir şablona dict listesi olarak iletin ( 'dan daha fazla bir querysettir)?

    Bazı yön ve kod ipuçlarını arıyorum. Doğru yolda mıyım? Daha iyi bir yolu var mı?

  • cevap

    15

    Görüntülemekte olduğunuz bilgiler bir modelde ise, neden dışarı çıkmak için ihtiyacınız olan bilgileri görüntülemek için modele özellikler/yöntemler eklemeyin? Ardından, modelinize gerçek model listesini/sorgu kümesini geçirebilir ve yöntemleri özellikler olarak çağırabilirsiniz.

    örn. Eğer döngü içinde devlet değişkenlerine erişim gerekiyorsa

    class MyModel(models.Model): 
        model_field = models.CharField(max_length=255) 
    
        @property 
        def calculated_field(self): 
         return self._do_calculation(self.model_field) 
    

    , bir piton nesnesine herhangi özellik ekleyebilirsiniz unutmayın. Bu son derece yararlı olabilir.Bunların her ikisi de daha sonra şablonun içinde girilebildiği

    for row in object_list: 
        # update some variable we want to use in the template 
        row.newly_added_field = run_calculation(row, somevariable) 
    

    :

    {% for result in result_list %} 
        <tr> 
        <!-- some stuff that displays the model directly --> 
        <td>{{ result.calculated_field}}</td> 
        <td>{{ result.newly_added_field}}</td> 
        </tr> 
    {% endfor %} 
    
    +0

    Mükemmel yüzden görünümünde gibi bir şey olabilir. Cevabınız modeller ve querysets'lere daha fazla ışık tuttu. Şimdi bu Django olayını almaya başlıyorum. Küçük adımlar. Şimdi temel bir web sayfasında görüntülenmesi gereken verileri aldım. Teşekkürler Cory, ninebladed –

    +0

    emin şey, bu yardımcı oldu memnun. unutma cevap kabul edebilirsin ...;) – Cory