>

모델 상속으로 예기치 않은 동작이 발생했습니다.

이 코드는 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의 상위 항목을 작성하려면 어떻게해야합니까?


  • 답변 # 1

    나 자신을위한 해결책 : 우리는 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'>
    
    

  • 이전 Python Pandas csv import &quot;Error tokenizing data&quot; - python pandas csv 가져 오기 "데이터 토큰 화 오류" - 오류 줄 내용 표
  • 다음 reactjs에서 체크 박스 데이터를 보내는 방법