结合Django管理器

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以及任意数量的管理器方法的查询集结果链接起来?

2个回答

2

3
我们可以得到一些示例,展示如何使用来自from_queryset方法的as_manager将两个第三方管理器/查询集合并吗? - ncrmro

0
使用这种方法,多态查询集的所有方法都将可用,然后我们可以从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
        )

为什么要重写方法? - scry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接