python – Django:获取查询集的补充

前端之家收集整理的这篇文章主要介绍了python – Django:获取查询集的补充前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我得到一个特定模型的查询集,我想得到它的补充,即该模型的所有实例都不在上述查询集中.

我怎样才能做到这一点?

解决方法

简短解决方
qs = Model.objects.filter(...) # qs with objects to exclude
result = Model.objects.exclude(pk__in=qs.values_list('pk',flat=True))

更多DRY解决方

但是,如果您想多次使用逻辑,我建议将其封装在一个方法中.这是我在自定义查询集中使用的一个例子:

class QuerysetUtils:
    def get_queryset_complement(self,method):
        return self.exclude(pk__in=method().values_list('pk',flat=True))


class ExpirableQueryset(QuerysetUtils,models.query.QuerySet):
    def expired(self):
        return self.filter(expiration__lte=timezone.now())

    def unexpired(self):
        return self.get_queryset_complement(self.expired)

猜你在找的Python相关文章