遇到意外行为与模型继承。
我在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的祖先?
发布于 2018-12-04 08:58:35
为自己找到了解决方案:我们应该使用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'>https://stackoverflow.com/questions/53498308
复制相似问题