Доступ к связанному методу менеджера от другого менеджера - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь получить доступ к методу менеджера из менеджера связанной модели, но у меня нет успеха.

Допустим, это мои модели:

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 методам экземпляра?

...