Django REST Framework:使用组合过滤器从另一个查询集中排除一个查询集

迪米特里斯·马克里斯(Dimitris Makris)

我有以下is_active=True为特定用户返回对象的方法

def filter_active_user(self, queryset, name, value):
    return queryset.filter(active_states__is_active=True,
                           active_states__user_id=value)

我想建立一个方法,该方法将返回一个查询集,其中包含上述方法中未包含的所有对象。因此,我使用以下方法创建了以下方法exclude

def filter_inactive_user(self, queryset, name, value):
    return queryset.exclude(active_states__is_active=True,
                            active_states__user_id=value)

我还尝试了使用以下实现~Q

def filter_inactive_user(self, queryset, name, value):
    return queryset.filter(~Q(active_states__is_active=True,
                              active_states__user_id=value))

但是,我没有得到正确的结果。例如,在一个测试案例中,我创建了一些数据,该数据由3个对象组成。使用该方法,filter_active_user我得到了1个对象,希望使用该filter_inactive_user方法得到另外2个对象,但是我也得到了1个对象。下面更具体地介绍一下我的测试数据:

record_1.set_active_states_for_users([self.user1.uuid], True)
record_2.set_active_states_for_users([self.user1.uuid], False)
record_2.set_active_states_for_users([self.user2.uuid], True)
record_3.set_active_states_for_users([self.user2.uuid], False)

当我使用的filter_active_useruser=user2我得到了record_2当我使用filter_inactive_userfor时,user=user2我只会得到record_1而不是record_3您能帮我建立在查询集中组合两个过滤器的正确方法吗?

解决方案1:

def filter_inactive_user(self, queryset, name, value):
    qs_active = queryset.filter(active_states__is_active=True, active_states__user_id=value)
    qs_inactive = queryset.exclude(pk__in=qs_active.values_list('pk', flat=True))

解决方案2:

def filter_inactive_user(self, queryset, name, value):
    qs_inactive = queryset.exclude(active_states__is_active=True).exclude(active_states__user_id=value)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django从另一个查询集中排除一个查询集

来自分类Dev

Django从另一个查询集中排除一个查询集

来自分类Dev

Django从另一个查询集中将查询集中的项目排除在外

来自分类Dev

Django模板:另一个过滤器

来自分类Dev

Django过滤器manytomanyfield排除与另一个模型相关的对象

来自分类Dev

在 django REST framework 上的过滤获取请求中包含来自另一个引用模型的属性

来自分类Dev

在一个查询集 Django rest 框架中查找任何存在的条件

来自分类Dev

Django REST Framework在另一个ViewSet上添加一个ViewSet作为详细信息

来自分类Dev

如何以编程方式在另一个视图中调用Django Rest Framework视图?

来自分类Dev

如何使用Django Rest过滤器限制查询结果

来自分类Dev

django过滤器,如果对象出现在另一个表中

来自分类Dev

Django REST Framework中的否定或排除过滤器

来自分类Dev

使用与用户匹配的两个条件之一来过滤查询集。Django Rest框架

来自分类Dev

Django Rest Framework,如何在另一个外键中获取外键的对象数量

来自分类Dev

Django-如何在我的查询集中添加另一个要搜索的字段

来自分类Dev

如何从 Django 中另一个对象列表的查询集中获取对象

来自分类Dev

如何使用Django Rest Framework过滤器将过滤器链接在一起

来自分类Dev

如何从另一个表Django Rest框架获取相关数据

来自分类Dev

组合Django查询集的过滤器

来自分类Dev

根据 Django 中另一个查询返回的对象数量进行过滤

来自分类Dev

通过另一个字典订购Django查询集

来自分类Dev

Django:将查询集动态更改为另一个模型

来自分类Dev

django ListView - 通过加入另一个模型自定义查询集

来自分类Dev

在Django中,如何优雅地将查询集过滤器添加到一个大型组或对象的所有成员?

来自分类Dev

在Django中,如何优雅地将查询集过滤器添加到一个大型组或对象的所有成员?

来自分类Dev

Django-rest-framework:如何在另一个应用程序(同一项目)中为ViewSet注册路由?

来自分类Dev

Django模型过滤器的一个领域

来自分类Dev

可以使用 .upper() 检查 django rest 查询过滤器

来自分类Dev

Django多对多:在一个相关查询集中获取元素但排除其他相关查询集中的元素的最佳方法?

Related 相关文章

  1. 1

    Django从另一个查询集中排除一个查询集

  2. 2

    Django从另一个查询集中排除一个查询集

  3. 3

    Django从另一个查询集中将查询集中的项目排除在外

  4. 4

    Django模板:另一个过滤器

  5. 5

    Django过滤器manytomanyfield排除与另一个模型相关的对象

  6. 6

    在 django REST framework 上的过滤获取请求中包含来自另一个引用模型的属性

  7. 7

    在一个查询集 Django rest 框架中查找任何存在的条件

  8. 8

    Django REST Framework在另一个ViewSet上添加一个ViewSet作为详细信息

  9. 9

    如何以编程方式在另一个视图中调用Django Rest Framework视图?

  10. 10

    如何使用Django Rest过滤器限制查询结果

  11. 11

    django过滤器,如果对象出现在另一个表中

  12. 12

    Django REST Framework中的否定或排除过滤器

  13. 13

    使用与用户匹配的两个条件之一来过滤查询集。Django Rest框架

  14. 14

    Django Rest Framework,如何在另一个外键中获取外键的对象数量

  15. 15

    Django-如何在我的查询集中添加另一个要搜索的字段

  16. 16

    如何从 Django 中另一个对象列表的查询集中获取对象

  17. 17

    如何使用Django Rest Framework过滤器将过滤器链接在一起

  18. 18

    如何从另一个表Django Rest框架获取相关数据

  19. 19

    组合Django查询集的过滤器

  20. 20

    根据 Django 中另一个查询返回的对象数量进行过滤

  21. 21

    通过另一个字典订购Django查询集

  22. 22

    Django:将查询集动态更改为另一个模型

  23. 23

    django ListView - 通过加入另一个模型自定义查询集

  24. 24

    在Django中,如何优雅地将查询集过滤器添加到一个大型组或对象的所有成员?

  25. 25

    在Django中,如何优雅地将查询集过滤器添加到一个大型组或对象的所有成员?

  26. 26

    Django-rest-framework:如何在另一个应用程序(同一项目)中为ViewSet注册路由?

  27. 27

    Django模型过滤器的一个领域

  28. 28

    可以使用 .upper() 检查 django rest 查询过滤器

  29. 29

    Django多对多:在一个相关查询集中获取元素但排除其他相关查询集中的元素的最佳方法?

热门标签

归档