Ставьте в nginx кеш на час, а то и сутки, и похую на количество запросов и их кривизну :)
@mathete, для html динамического? )))) нихуя у вас методы )))
Форум → Программирование → Python → Django → Связи в моделях
Страницы: ← Предыдущая страница →
3 ноября 2015 г. 18:34, спустя 1 минуту 4 секунды
Ставьте в nginx кеш на час, а то и сутки, и похую на количество запросов и их кривизну :)
@mathete, для html динамического? )))) нихуя у вас методы )))
9 ноября 2015 г. 15:19, спустя 5 дней 20 часов 44 минуты
Смех смехом, а в результате у меня получилось по 400 запросов на страницу ))) Я оптимизировал это безобразие с помощью select_related, но для множественных связей как я понял надо использовать prefetch_related и тут у меня возникла проблема. В модель картинок я добавляю related_name для связи. Получается так
class CatalogElements(models.Model):
name = model.CharField()
class CatalogImages(models.Model):
element = model.ForeignKey('CatalogElements', related_name='images')
src = model.CharField()
Далее пытаюсь получить элемент и картинки к нему
element = CatalogElement.objects.select_related(не множественные связи других моделей).prefetch_related('images').get(pk=1)
если я правильно понял, после этого я могу обращаться к картинкам через element.images, но оно возвращает catalog.CatalogImages.None
Я посмотрел лог запросов и там видно что делается дополнительный запрос в таблицу и извлекаются нужные изображения, но почему-то они недоступны из объекта element. Что я делаю не так?
9 ноября 2015 г. 15:29, спустя 10 минут 6 секунд
@Crank, хз, вот не поленился и выполнил твои запросы
In [10]: CatalogElements.objects.prefetch_related('images').filter(pk=1)
DEBUG 2015-11-09 06:29:13,263 utils 6514 139692681328448 (0.000) SELECT "products_catalogelements"."id", "products_catalogelements"."name" FROM "products_catalogelements" WHERE "products_catalogelements"."id" = 1 LIMIT 21; args=(1,)
DEBUG 2015-11-09 06:29:13,264 utils 6514 139692681328448 (0.000) SELECT "products_catalogimages"."id", "products_catalogimages"."element_id", "products_catalogimages"."src" FROM "products_catalogimages" WHERE "products_catalogimages"."element_id" IN (1); args=(1,)
и
In [11]: CatalogElements.objects.prefetch_related('images').get(pk=1)
DEBUG 2015-11-09 06:30:35,429 utils 6514 139692681328448 (0.000) SELECT "products_catalogelements"."id", "products_catalogelements"."name" FROM "products_catalogelements" WHERE "products_catalogelements"."id" = 1; args=(1,)
DEBUG 2015-11-09 06:30:35,431 utils 6514 139692681328448 (0.000) SELECT "products_catalogimages"."id", "products_catalogimages"."element_id", "products_catalogimages"."src" FROM "products_catalogimages" WHERE "products_catalogimages"."element_id" IN (1); args=(1,)
Убери select_related, может они мешают, дебаж? В общем доку почитай, сорцы посмотри, я всегда так делаю
9 ноября 2015 г. 16:29, спустя 1 час 8 секунд
@adw0rd, не помогло. Вроде все по докам делаю, но что-то не так. Буду искать примеры.
9 ноября 2015 г. 16:37, спустя 7 минут 31 секунду
@adw0rd, кароче удалось победить проблему заданием to_attr через Prefetch('catalogimages_set', to_attr='images'). Хуй знает почему без него не работало.
9 ноября 2015 г. 16:45, спустя 8 минут 1 секунду
ну и дерьмо ж, жанга гавно, все, перехожу на perl
9 ноября 2015 г. 16:49, спустя 4 минуты 16 секунд
@Crank, что за версия жанги?
9 ноября 2015 г. 16:58, спустя 6 минут 15 секунд
@Crank, у меня такая же
15 декабря 2015 г. 18:52, спустя 5 минут 37 секунд
Есть 2 модели
class Parent(models.Model) {
#...
}
class Children(models.Model) {
parent = models.ForeignKey(Parent)
data_type = models.CharField(choices=('A', 'B'))
}
Я хочу получить список Parents с посчитанным колличеством соответствующих Children по типам A и В
тоесть тапа такого:
Parent1: A(5), B(0)
Parent2: A(1), B(3)
Parent3: A(0), B(12)
Прочитал что это делается через aggregate, но что-то никак не могу вкурить как правильно построить запрос.
15 декабря 2015 г. 19:26, спустя 34 минуты 5 секунд
@Crank, вот тут смотри последний пример
# Each publisher, each with a count of books as a "num_books" attribute.
>>> from django.db.models import Count
>>> pubs = Publisher.objects.annotate(num_books=Count('book'))
>>> pubs
[<Publisher BaloneyPress>, <Publisher SalamiPress>, ...]
>>> pubs[0].num_books
ну а чтобы для А и B отдельно посчитать, то только двумя запросами, как здесь ответили
Агрегация — Документация Django 1.8
djbook.ru
Django conditional annotation
I'm surprised that this question apparently doesn't yet exist. If it does, please help me find it. I want to use annotate (Count) and order_by, but
stackoverflow.com
15 декабря 2015 г. 21:44, спустя 2 часа 4 минуты 4 секунды
@phpdude, вот я лупоглаз, спасибо
@Sinkler, спс
Страницы: ← Предыдущая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!