我得到某个模型的查询集,我想得到它的补充,即该模型的所有实例not在上述查询集中。
我怎样才能做到这一点?
简短的解决方案
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)