通过模型继承满足了意外行为。
我在Django shell中启动以下代码:
import mptt
from django.db import models
class MyTreeQuerySet(mptt.querysets.TreeQuerySet):
pass
class MyTreeManager(
models.Manager.from_queryset(MyTreeQuerySet)
):
pass
class TreeModel(mptt.models.MPTTModel):
class Meta:
app_label = 'myapp'
objects = MyTreeManager()
print(type(TreeModel.objects.all()))
得到了:mptt.querysets.TreeQuerySet
。
但是等了MyTreeQuerySet
。
经Django == 1.11和django-mptt == 0.9.1检查
如何使用自定义查询集创建MPTTModel的祖先?
答案 0 :(得分:0)
为自己找到了解决方案:我们应该使用mptt.managers.TreeManager.from_queryset
而不是dj_models.Manager.from_queryset
。
我猜想是因为MPTTModel.__new__
的管理者列表修补功能有些神奇。我没挖。
import mptt
from django.db import models
class MyTreeQuerySet(mptt.querysets.TreeQuerySet):
pass
class MyTreeManager(
mptt.managers.TreeManager.from_queryset(MyTreeQuerySet)
):
pass
class TreeModel(mptt.models.MPTTModel):
class Meta:
app_label = 'myapp'
objects = MyTreeManager()
print(type(TreeModel.objects.all()))
# output:
# <class '__main__.MyTreeQuerySet'>