如何将模型移动到Django网站管理员的其他部分

Tom*_*iak 7 python django model admin

是否可以将默认组模型从"身份验证和授权"部分(在Django管理站点上)移动到自定义模型以及如何实现?

让我们从另一个词开始.

我的Django项目中有一个非常简单的应用程序'accounts'.

models.py文件如下所示:

from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    def __str__(self):
        return self.email
Run Code Online (Sandbox Code Playgroud)

serializers.py文件:

from rest_framework import serializers
from django.contrib.auth.models import Group
from django.contrib.auth import get_user_model


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group


class UserSerializer(serializers.HyperlinkedModelSerializer):
    groups = serializers.HyperlinkedRelatedField(
        many=True,
        required=False,
        read_only=True,
        view_name="group-detail"
    )

    class Meta:
        model = get_user_model()
        exclude = ('user_permissions',)
Run Code Online (Sandbox Code Playgroud)

现在,在管理站点上,我有两个部分:"帐户"和"身份验证和授权"."帐户"部分包含我的"用户"表(用户模型)和"身份验证和授权"部分包含"组"表(适用于Django的默认授权组模型).

我的问题是 - 是否可以以及如何将Groups表(模型)移动到'Accounts'部分?

我甚至试图基于Django的默认auth Group模型创建一个自定义的"Group"模型,但一直坚持迁移异常.

Gre*_*eev 9

是否可以将默认组模型从"身份验证和授权"部分(在Django管理站点上)移动到自定义模型以及如何实现?

是的,这是可能的.

1)您可以将模型移动到auth部分,只需添加到您的班级:

class Meta:
    app_label = 'auth'
Run Code Online (Sandbox Code Playgroud)

2)您可以将组和用户模型移动到您的应用程序部分,因为该变体需要:

覆盖用户模型并将其添加到您的应用程序

from django.contrib.auth.models import AbstractUser


class CustomUser(AbstractUser):
    pass
Run Code Online (Sandbox Code Playgroud)

还需要添加到您的项目设置 AUTH_USER_MODEL = 'your_app.CustomUser'

不要忘记从您的应用程序在admin.py中声明:

class UserAdmin(admin.ModelAdmin):
    pass


admin.site.register(CustomUser, UserAdmin)
Run Code Online (Sandbox Code Playgroud)

对于组模型,将此代码放在admin.py中:

from django.db.models.loading import get_models
from django.contrib.auth import models

models = get_models(models)
models[1]._meta.app_label = 'your_app'
Run Code Online (Sandbox Code Playgroud)

3)你可以看看django-admin-tools

  • @D.Nibon 不幸的是,这会导致 Django auth 目录本身中出现新的迁移文件。这不是一个好主意。 (3认同)
  • 要在django 2+中移动组模型,这可以很好地放入您的admin.py.`from django.apps import apps``apps.get_model('auth.Group')._ meta.app_label ='<your-new-app-name>'` (2认同)