2011-11-20 90 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