【问题标题】:django-moderation with custom model managers带有自定义模型管理器的 django-moderation
【发布时间】:2021-08-01 12:01:36
【问题描述】:

我正在使用 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: type object 'Foo' 没有属性 'unmoderated_published'

我试图通过添加字段并为已审核的对象创建管理器来解决此问题 - 但尽管这消除了错误,但该对象不再被审核。

我可以让创建的对象得到审核的唯一方法是删除所有模型管理器 - 默认的 objects 管理器除外。

如何让 django-moderation 使用自定义模型管理器处理模型?

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

AttributeError: type object 'Foo' 没有属性 'unmoderated__tree_manager'

【问题讨论】:

    标签: django django-models django-mptt django-moderation


    【解决方案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
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 2011-04-20
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      相关资源
      最近更新 更多