Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> django extra и псевдонимы таблиц для вывода, 2 вычисляемы полей 1 таблицы или.. 
:(
    Опции темы
newsTester
Дата 31.8.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



работаю с django ORM
задача следующая (почти из учебника): кроме всего прочего есть 2 таблицы 
1 - со списком тем, 
2 - указывает принадлежность книги к заданной теме, а так же имеется ли книга в магазине или ее надо заказать на складе.
Надо вывести таблицу с данными: назнание темы, сколько книг по теме имеется в наличии, сколько книг по теме можно раздобыть (т.е. есть в наличии или на складе), и отсортировать все темы по убыванию кол-ва книг в наличии.
Табличку хочу сгенерировать на уровне БД т.к. тем ну оччень много.
На данный момент разобралась как с помощью extra сделать одно из двух
таблицу с данными: назнание темы, сколько книг по теме имеется в наличии, и отсортировать все темы по убыванию кол-ва книг в наличии.
или
таблицу с данными: назнание темы, сколько книг по теме можно раздобыть (т.е. есть в наличии или на складе), и отсортировать все темы по убыванию кол-ва книг которые можно раздобыть.

Попытка добавить два вычисляемых поля не проходит т.к. при еденичном подключении к запросу таблиц фильтр по полю "в наличии" срабатывает на обоих полях и выходит
таблица с данными: назнание темы, 2 столбца "сколько книг по теме имеется в наличии", и отсортировать все темы по убыванию кол-ва книг в наличии.
А при повторном подключении таблиц получаю сообщение об ошибке не однозначности использования таблиц.
В документации читаю, что в extra есть возможность использовать псевдонимы таблиц, но вот как это делается я так и не поняла...

Если знаете научите как их использовать. А может я вообще слишком на мудрила и можно все решить красивее?
PM MAIL   Вверх
Daevaorn
Дата 31.8.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 3
Всего: 70



Цитата(newsTester @  31.8.2009,  01:18 Найти цитируемый пост)
А может я вообще слишком на мудрила и можно все решить красивее? 

Явно перемудрено. Покажите модели и то как вы делаете запрос. Скорей всего extra  и не нужно.
PM MAIL WWW   Вверх
newsTester
Дата 31.8.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



ну... допусти (т.к. по правде программа немного не про то, но ведь суть проблемы таже..) требуемый кусок модели выглядит так
Код


class Theams(models.Model):
    id = models.IntegerField(primary_key=True)
    title = models.CharField(max_length=600, blank=True)
    class Meta:
        db_table = u'Theams'

class BooksInTheams(models.Model):
    books = models.ForeignKey(Books)
    theam = models.ForeignKey(Theams)
    include = models.CharField(max_length=1, blank=True)
    class Meta:
        db_table = u'Books_in_Theams'



тогда чтоб вывести табличку с подсчетом всех книг в наличии я пишу

Код


   ex_theamrs = Theams.objects.all()
    ex_theams.query.group_by.append('theams.id')
    ex_theams = ex_theams.extra(select = {'in_count': 'count(theams.id)'}, tables = ['theams', 'books_in_theams'],
                    where = [' books_in_theams.include = 1', ' theams.id = books_in_theams.theam']).order_by('-in_count')



а для того чтобы вывести табличку с подсчетом всех книг по теме вообще

Код


   ex_theamrs = Theams.objects.all()
    ex_theams.query.group_by.append('theams.id')
    ex_theams = ex_theams.extra(select = {'all_count': 'count(theams.id)'}, tables = ['theams', 'books_in_theams'],
                                    where = [' theams.id = books_in_theams.theam']).order_by('-all_count')



ЗЫ пока писала обратила внимание, что не естественно, то что наличие книги на месте прописано не в таблице Books а в таблице BooksInTheams, но мне надо именно так, точнее для реального условия это чуть ли не необходимо, так что прошу принять модель данных как величену не изменную.

Это сообщение отредактировал(а) newsTester - 31.8.2009, 01:44
PM MAIL   Вверх
Daevaorn
Дата 1.9.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 3
Всего: 70



1.
Код

from django.db.models import Count

Theams.objects.filter(booksintheams__include='1').annotate(all_count=Count('booksintheams'))


2.
Код

Theams.objects.annotate(all_count=Count('booksintheams'))


А модели действительно ужасны.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Веб-разработка и фреймворки | Следующая тема »


 




[ Время генерации скрипта: 0.0942 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.