Я пытаюсь получить доступ к методу менеджера из менеджера связанной модели, но у меня нет успеха.
Допустим, это мои модели:
class ModelA(models.Model):
description = models.TextField(blank=True)
objects = ModelAQuerySet.as_manager()
class ModelB (models.Model):
a = models.ForeignKey(ModelA, related_name='a_objs')
objects = ModelBQuerySet.as_manager()
И я определяю менеджеров как QuerySets, то есть:
class ModelAQuerySet(models.QuerySet):
def description_starts_with(self, desc):
return self.filter(description__startswith=desc)
class ModelBQuerySet(models.QuerySet):
pass
То, что я хотел бы сделать, это создать метод ModelBQuerySet, который будет предварительно выбирать объекты модели A, начиная с определенного описания.
Вот НЕПРАВИЛЬНЫЙ пример того, что я пытаюсь сделать:
class ModelBQuerySet(models.QuerySet):
def prefetch_a_objs_starts_with(self, desc):
return self.prefetch_related(
Prefetch('a_objs',
queryset=ModelAQuerySet.description_starts_with(desc),
to_attr='a_objs_with_desc'))
Это, конечно, не работает, потому что description_starts_with
является методом экземпляра, и здесь я вызываю его из класса.
Даже это совершенно неправильно, я надеюсь, что это дает представление о том, что я пытаюсь сделать.
Вопрос: как создать метод models.QuerySet
с предварительной выборкой, который может обращаться к связанным с ним models.QuerySet
методам экземпляра?