【问题标题】:How to move model to the other section in Django's site admin如何将模型移动到 Django 站点管理中的其他部分
【发布时间】:2015-03-23 03:56:22
【问题描述】:

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

换句话说,让我们从头开始。

我的 Django 项目中有一个非常简单的应用程序“帐户”。

models.py 文件如下所示:

from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    def __str__(self):
        return self.email

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',)

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

我的问题是 - 是否有可能以及如何将组表(模型)移动到“帐户”部分?

我什至尝试基于 Django 的默认身份验证组模型创建自定义“组”模型,但遇到了迁移异常。

【问题讨论】:

  • 您要查找的 URL 结构是什么?那么 2 个应用会在 Accounts 下吗?
  • 我认为您的要求是在管理站点中显示具有更多功能的用户模型。为此,您需要取消注册 User 模型,然后使用所需字段创建一个 AdminModel,然后再次注册 User 模型。见stackoverflow.com/questions/2552516/…

标签: python django model admin


【解决方案1】:

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

是的,这是可能的。

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

class Meta:
    app_label = 'auth'

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

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

from django.contrib.auth.models import AbstractUser


class CustomUser(AbstractUser):
    pass

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

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

class UserAdmin(admin.ModelAdmin):
    pass


admin.site.register(CustomUser, UserAdmin)

对于组模型,将此代码放在 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'

3) 可以看django-admin-tools

【讨论】:

  • 谢谢。这就是我一直在寻找的。​​span>
  • from django.db.models.loading import get_models 在 Django 1.9 及更高版本中已弃用
  • 要在 django 2+ 中移动组模型,这可以很好地放入您的 admin.py。 from django.apps import appsapps.get_model('auth.Group')._meta.app_label = '<your-new-app-name>'
  • @D.Nibon 非常感谢。
  • @D.Nibon 不幸的是,这会导致 Django auth 目录本身出现新的迁移文件。不是个好主意。
猜你喜欢
  • 2015-02-19
  • 2012-10-12
  • 2016-02-18
  • 2016-03-08
  • 2019-02-09
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多