#django #django-models #django-mptt #django-moderation
Вопрос:
Я использую Django 3.2 и django-модерацию.
Я хочу умерить Фу:
class MyCustomManager1(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(is_published=True)
class MyCustomManager2(MyCustomManager1):
def get_queryset(self):
return super().get_queryset().filter(/* some criteria */)
class Foo(models.Model):
# some fields
objects = models.Manager()
published = MyCustomManager1()
live = MyCustomManager2()
moderation.register(Foo)
Когда я бегу python manage.py makemigrations
, я получаю сообщение об ошибке:
AttributeError: объект типа » Foo » не имеет атрибута «unmoderated_published»
Я попытался обойти это, добавив поля и создав менеджеры для модерируемых объектов, но, хотя это избавило от ошибок, объект больше не модерировался.
Единственный способ, которым я мог модерировать созданные объекты, состоял в том, чтобы удалить всех менеджеров моделей — за исключением objects
менеджера по умолчанию.
Как заставить django-модерацию работать с моделями с помощью пользовательских менеджеров моделей?
Я получаю ту же ошибку, когда пытаюсь получить Foo из MPTT — ДАЖЕ без использования пользовательских менеджеров моделей.
Ошибка атрибута: объект типа » Foo » не имеет атрибута «немодерируемый__дерево_менеджер»
Ответ №1:
django-moderation
не очень хорошо работает с неявным менеджером по умолчанию.
Укажите default_manager_name
явно:
class Foo(models.Model):
# some fields
objects = models.Manager()
published = MyCustomManager1()
live = MyCustomManager2()
class Meta: # Add this
default_manager_name = 'objects' # Add this
Я получаю ту же ошибку, когда пытаюсь получить Foo из MPTT — ДАЖЕ без использования пользовательских менеджеров моделей.
MPTT добавляет пользовательский менеджер моделей _tree_manager
.