从另一位经理访问相关的经理方法

时间:2018-09-11 14:13:07

标签: django django-models django-queryset django-orm django-managers

我正在尝试从相关模型的管理器访问管理器方法,但没有成功。

让我们说这些是我的模特:

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()

我将管理器定义为QuerySet,即:

class ModelAQuerySet(models.QuerySet):
    def description_starts_with(self, desc):
        return self.filter(description__startswith=desc)

class ModelBQuerySet(models.QuerySet):
    pass

我要做的是创建一个ModelBQuerySet方法,该方法从某个描述开始预取modelA对象。

这是我尝试做的一个错误示例:

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方法?

0 个答案:

没有答案