Организация Django Queryset в необычный макет DIV (шаблон) - PullRequest
0 голосов
/ 21 ноября 2011

Прежде всего, я новичок в 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

  • Чтобы показать все записи Селиона, мой подход кажется чертовски медленным.Загрузка главной страницы занимает более 10 секунд.

---- в поле зрения -----

allsel = Selion.objects.all()

----- в шаблоне ----

{{allsel|length}}

Вопрос

  • Какой самый эффективный способ показать общее количество записей Selion в основном шаблоне приложения?

Случай 2

  • Пользователь вводит плавающее значение в поиск и выполняет запрос к базе данных.
  • Я найду диапазон введенных значений в Selion (поле monoiso) и загрузлю шаблон результатов.
  • В шаблоне результатов в левом контейнере DIV я покажу все совпадающие значения в нижнем и верхнем диапазонеСелиона (подано в моноизо)

--- в поле зрения ----

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 (приведенный выше шаблон)

  • Right DIVВ этом блоке отображаются все поля моделей данных.
  • Правый блок DIV - горизонтальная вкладка, первая вкладка (Detail1) предназначена для (table1, table2, table3, table4) и Detail2 для (trum)
  • Я хочу, чтобы по умолчанию RQuery 1 был активным и отображал данные таблицы1, при прокрутке будут отображаться таблица2, таблица3 и таблица4.
  • Если щелкнуть по разным ссылкам слева, содержимое должно измениться соответственно.

Я постоянно пытаюсь это сделать, но не могу понять, как связать набор запросов в другую вкладку и прокрутитьнавигация.Более того, у меня возникают проблемы с производительностью, когда мне приходится отфильтровывать мой вышеуказанный набор запросов.

Пожалуйста, помогите мне разобраться, как это сделать!

1 Ответ

1 голос
/ 21 ноября 2011

Вам не нужно увлажнять все объекты "Selion", чтобы получить длину набора запросов.Вместо этого используйте Selion.objects.count (), который будет возвращать скалярное значение вместо 100k + объектов.

Для вкладок найдите jQueryUI для простой реализации вкладки с некоторыми обратными вызовами Ajax для отображения соответствующих данных на каждой вкладке.

...