将Django Queryset安排到花哨的DIV布局(模板)

时间:2011-11-20 22:39:35

标签: django templates html django-queryset

首先,我是Django的新手,并试图学习,所以请容忍我的长期问题。

我有我的应用程序的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提交)的最低和最高范围内的所有匹配值

---在视图中----

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&amp;表4
  • 如果点击左侧的不同链接,则内容应相应更改。

我一直在尝试这样做,但无法弄清楚将查询集链接到不同的选项卡和滚动导航。此外,当我必须过滤掉上面的查询集时,我的性能有问题。

请帮我弄清楚如何做到这一点!

1 个答案:

答案 0 :(得分:1)

您不需要对所有“Selion”对象进行水合以获取查询集的长度。而是使用Selion.objects.count(),它将返回标量值而不是100k +对象。

对于选项卡,请查看jQueryUI以获取一个简单的选项卡实现,其中包含一些Ajax回调,以在每个选项卡中显示相应的数据。