4

我有两个 Django 经理

投票管理器

class VoteManager(model.Manager):

    def all_with_vote_info(self):
        qs = super(VoteManager, self).get_query_set()
        qs = qs.annotate(score=Sum('votes__score', distinct=True))
        return qs

    ....

软删除管理器

class SoftDeleteManager(models.Manager):

    def all_active(self):
        qs = super(SoftDeleteManager, self).get_query_set()
        qs = qs.filter(time_deleted=None)
        return qs

    ....

如何链接来自VoteManager.all_with_vote_infoSoftDeleteManager.all_active和任意数量的管理器方法的查询集结果?

4

2 回答 2

2

找到了解决方案:PassThroughManager

https://django-model-utils.readthedocs.org/en/latest/managers.html#passthroughmanager

更新:

PassThroughManager已弃用,请改用 Django 的内置QuerySet.as_manager()和/或Manager.from_queryset()实用程序。

于 2012-12-28T21:20:24.173 回答
0

使用此方法 PolymorphicQuerySet 方法将全部可用,然后我们可以从 TimeseriesQueryset 注册其他方法

class UserPartQuerySet(PolymorphicQuerySet, TimeSeriesQuerySet):


    def prefetch_latest(self, *related_names):
        return TimeSeriesQuerySet.prefetch_latest(self, *related_names)

    def filter_outdated(self, *related_names):
        return TimeSeriesQuerySet.filter_outdated(self, *related_names)

    def update_timeseries(self, related_name, collector, force=False):
        return TimeSeriesQuerySet.update_timeseries(
                self,
                related_name,
                collector,
                force=False
        )
于 2017-11-28T15:16:28.743 回答