-
А как можно сделать прицепляемые кастомные методы для кастомной фильтрации и последующей кастомной же сортировки? (кастомная сортировка сначала подцепляет доп. таблицы которые нужны сугубо только для этой сортировки)
Чтобы было вот так:
Entity.faceted — это кастомный менеджер.entities = Entity.faceted().by_region(region).by_topic(topic).sorted_by_activity()
Нужно ли в методах кастомного менеджера заставлять возвращать отфильтованного себя же, а не QuerySet?
Либо надо вдобавок к кастомному менеджеру сделать кастомный QuerySet, из менеджера возвращать именно его, а все методы кастомной фильтрации и сортировки сделать в этом кастомном QuerySet-е? -
Либо надо вдобавок к кастомному менеджеру сделать кастомный QuerySet, из менеджера возвращать именно его, а все методы кастомной фильтрации и сортировки сделать в этом кастомном QuerySet-е?
Именно так будет максимально правильно.
-
Entity.faceted()
Если это менеджер, то скобка зачем?)
-
Да, скобки там нет, должно быть так:
entities = Entity.faceted.by_region(region).by_topic(topic).sorted_by_activity() -
Уже нашёл в буржуйском форуме что некто делает так кастомным QuerySet-ом и сделал. Элементарно всё, только нужно для каждого такого случая создавать еще и почти пустой кастомный менеджер. Если нужно будет такое для другой модели, сделаю что-то вроде:
# где-то:
# в моделях:class QuerySetManager(models.Manager):
def __init__(self,queryset_class):
super(QuerySetMagager,self).__init__()
self.queryset_class = queryset_class
def get_query_set(self):
return self.queryset_class(self.model)class EntityQuerySet(QuerySet):
# тут прицепляемые (chained) кастомные методы для фильтрации и сортировки
# ...
class Entity(models.Model):
# ...
objects = QuerySetManager(EntityQuerySet) -
Вот-вот.
Не забывайте также тегом
[code]пользоваться.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

