2011-11-20 87 views
0

首先,我是一個Django的新手,並試圖學習,所以請容忍我的長問題。將Django Queryset安排到一個奇特的DIV佈局(模板)

我有我的應用程序的以下django數據模型。爲了表明我已經編輯並刪除了大部分模型。

class table1(models.Model): 
    user = models.CharField(max_length=25) 
    filename = models.CharField(max_length=40) 


    def __unicode__(self): 
     return u'%s' % (self.user) 

class table2(models.Model): 

    accession = models.CharField(max_length=50, blank=True) 
    version = models.CharField(max_length=50, blank=False) 
    exp = models.ForeignKey(table1) 

    def __unicode__(self): 
     return u'%s, %s, %s' %(self.accession,self.version) 

class table3(models.Model): 
    sf_id = models.CharField(max_length=50, blank=False) 
    name = models.CharField(max_length=60, blank=False) 
    mzml_fk = models.ForeignKey(table2) 

    def __unicode__(self): 
     return u'%s, %s' %(self.sf_id, self.name) 


class table3_1(models.Model): 
    ref = models.CharField(max_length=50, blank=False) 
    value = models.CharField(max_length=100) 
    sf_fk= models.ForeignKey(table3) 

    def __unicode__(self): 
     return u'%s, %s' %(self.ref, self.value) 


class table4(models.Model): 
    soft_id = models.CharField(max_length= 45) 
    version = models.CharField(max_length=50, blank=False) 
    soft_fk = models.ForeignKey(table2) 

    def __unicode__(self): 
     return u'%s, %s' %(self.soft_id, self.version) 


class table4_1(models.Model): 
    cvRef = models.CharField(max_length=10, blank=False) 
    value = models.CharField(max_length=45, blank=True) 
    soft_cv_fk = models.ForeignKey(table4) 

    def __unicode__(self): 
     return u'%s, %s' %(self.cvRef, self.value) 


class Selion(models.Model): 
    monoiso = models.FloatField() 
    state = models.CharField(max_length= 2) 
    sele_fk = models.ForeignKey(table2) 

    def __unicode__(self): 
     return u'%s, %s' % (self.monoiso,self.state) 

class trum(models.Model): 
    spec_id = models.CharField(max_length= 60, blank=False) 
    spec_index = models.IntegerField(blank=False) 
    spec_fk = models.ForeignKey(Selion) 

    def __unicode__(self): 
     return u'%s, %s, %s, %s' % (self.spec_id,self.spec_index) 

注意

  • Selion是包含到現在更多的則記錄100500最關鍵的模型。
  • 我經過深的任何記錄與Selion的查詢(monoiso十進制場)

案例1

  • 要顯示Selion的所有記錄我的做法似乎該死的緩慢。它需要主頁加載更多的10秒。

----鑑於-----

allsel = Selion.objects.all() 

-----在模板----

{{allsel|length}} 

問題

  • 什麼是顯示主應用程序模板中Selion記錄總數的最有效方式è?

案例2

  • 用戶輸入搜索浮點值並做數據庫查詢。
  • 我會在Selion(monoiso字段)和加載結果模板中找到輸入的值範圍。
  • 在結果模板上留下DIV容器我將展示在最低和最高範圍Selion的所有匹配值(monoiso日)

---在View ----

myquery = Selion.objects.select_related().filter(monoiso__range=(lowrange, highrange)) 

---在模板----

<div id="leftcontainer"> 
    {% for section in myquery %} 
     <ul>      
      <li><a href="#{{section.monoiso}}">{{section.monoiso}}</a></li> 
     </ul> 
</div> 

enter image description here

我成功到現在,但無法進一步發展。

情況3(上面的模板)

  • 右DIV塊是其中所有的數據模型字段是顯示。
  • 右DIV塊是水平製表符,第一個製表符(Detail1)用於(table1,table2,table3,table4)和Detail2用於(trum)
  • 我希望默認RQuery 1爲活動狀態並顯示table1數據,滾動將顯示table2,table3 & table4。
  • 如果點擊左側的不同鏈接,內容會相應改變。

我不斷試圖做到這一點,但無法弄清楚將查詢集鏈接到不同的選項卡和滾動導航。此外,當我必須過濾掉上面的查詢集時,我遇到了性能問題。

請幫我想辦法做到這一點!

回答

1

您不需要水化所有「Selion」對象以獲取查詢集的長度。而是使用Selion.objects.count(),它將返回一個標量值而不是100k +對象。

對於選項卡,請查看jQueryUI以獲取簡單的選項卡實現,其中包含一些Ajax回調以在每個選項卡中顯示適當的數據。

+0

@ Brandon- count()是完美的。我已經創建了佈局(左和右DIV)。但是,在點擊左側鏈接之後,我在加載右側DIV(標籤)中的內容時遇到了問題。如果你有任何關於我的問題的教程,你能轉發我嗎?謝謝 – thchand

+0

您是否想過通過Ajax調用讓製表符從視圖中加載內容? – Brandon

+0

不,我沒有想過這個,只是我正在生成上下文變量並在模板中使用它們。 – thchand