class CustomManager(models.Manager): def filter(self, *args, **kwargs): cOnditions= ... return super().get_queryset().filter(conditions).filter(*args, **kwargs)
这样使用 Custom.objects.filter(key=value)
是没有问题的,但是 Custom.objects.filter(key=value).filter(key2=value2)
这样就不行了,因为这个 filter
只作用在 manager 上,而没有作用在 queryset 上,应该如何处理啊?
![]() | 1 chaleaochexist 2024-01-04 17:22:10 +08:00 clone 你用的是哪个 django 版本? |
![]() | 2 chaleaochexist 2024-01-04 17:28:21 +08:00 老版本 django 可以这样解决. ``` class MyQueryset(models.QuerySet): pass class Manager(MyManagerBase.from_queryset(MyQueryset)): def get_queryset(self): return MyQueryset(self.model) ``` 新版本的话 https://github1s.com/django/django/blob/HEAD/django/db/models/query.py 参考一下`def _filter_or_exclude(self, negate, args, kwargs):` 这个方法 好久不用 django 了 仅供参考. |
3 mPatrickStar 2024-01-04 17:38:44 +08:00 试试这样能满足你的要求吗 class CustomManager(models.Manager): def get_queryset(self): cOnditions= ... return super().get_queryset().filter(conditions) |
![]() | 4 param 2024-01-05 11:21:12 +08:00 via Android @chaleaochexist 可以用 MyQueryset.as_maneger |