0

我正在使用 Django 3.2 和django-moderation

我想调节 Foo:

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-moderation 与自定义模型管理器一起使用模型?

当我尝试从MPTT派生 Foo 时遇到同样的错误- 即使不使用自定义模型管理器。

AttributeError:类型对象 'Foo' 没有属性 'unmoderated__tree_manager'

4

1 回答 1

0

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

当我尝试从 MPTT 派生 Foo 时遇到同样的错误 - 即使不使用自定义模型管理器。

MPTT 添加了自定义模型管理器_tree_manager

于 2021-11-19T17:57:03.440 回答