Django:向添加自定义管理器时不创建迁移授权我们

2024-10-03 00:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想向内置的auth.User模型添加一个自定义管理器。在

我避免切换到自己的用户模型,因为数据库中的现有数据链接到auth_user表。在

因此,我将以下内容添加到模型.py公司名称:

from django.contrib.auth.models import User, UserManager

class ActiveUserManager(UserManager):
    use_in_migrations = False
    def get_queryset(self):
        return super().get_queryset().filter(is_active=True)

# Monkeypatch auth.User to have custom manager
User.add_to_class('active_users', ActiveUserManager())

这似乎有效,直到我运行python manage.py makemigrations时,Django在myvenv/Lib/site-packages/django/contrib/auth/migrations文件夹中创建了一个迁移文件000n_auto_20181002_1721.py,其中包含以下内容:

^{pr2}$

在类ActiveUserManager中设置use_in_migrations = False没有帮助。在

对于如何避免创建此迁移文件或如何在不使用此行为的情况下向内置的auth.User模型添加自定义管理器,我将不胜感激。我使用的是django1.11。在


Tags: djangoinpy模型authfalse管理器use
1条回答
网友
1楼 · 发布于 2024-10-03 00:21:58

明白了。在

我还需要将'objects'管理器添加到User类中,否则Django将'active_users'视为默认管理器。在

完整代码如下:

from django.contrib.auth.models import User, UserManager

class ActiveUserManager(UserManager):
    use_in_migrations = False
    def get_queryset(self):
        return super().get_queryset().filter(is_active=True)

# IMPORTANT! to add 'objects' manager
# Otherwise Django treats 'active_users' as the default manager
User.add_to_class('objects', UserManager())

# Monkeypatch auth.User to have custom manager
User.add_to_class('active_users', ActiveUserManager())

我通过阅读ModelState.fromModel()来实现这一点,其中'active_users'是{},而{}管理器不是由^{设置的。在

即使设置了use_in_migrations = False,默认管理器也会添加到迁移中。在

相关问题 更多 >