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 348 天前
clone
你用的是哪个 django 版本? |
2
chaleaochexist 348 天前
老版本 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 348 天前
试试这样能满足你的要求吗
class CustomManager(models.Manager): def get_queryset(self): conditions = ... return super().get_queryset().filter(conditions) |
4
param 348 天前 via Android
@chaleaochexist 可以用 MyQueryset.as_maneger
|