【问题标题】:No user link in auth section of Django adminDjango admin 的 auth 部分中没有用户链接
【发布时间】:2020-08-24 13:39:07
【问题描述】:

我正在尝试实现自定义用户模型,但在 Django 管理网站的身份验证 URL localhost:8000/admin/auth/ 下,我的模型没有显示出来。

我在下面的链接中找到了整体问题的答案,但是当我尝试自己实现它时,我仍然没有在 Django 管理员的 auth 部分看到用户。

No “Users” link in “Auth” section of Django admin site

我在这里做错了什么?

models.py

from django.contrib.auth.models import AbstractUser


class CustomUser(AbstractUser):
    pass

admin.py

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreationForm, CustomUserChangeForm

CustomUser = get_user_model()


class CustomUserAdmin(UserAdmin):
    form = CustomUserChangeForm
    add_form = CustomUserCreationForm
    model = CustomUser
    list_display = (
        "email",
        "username",
    )

    fieldsets = (
        (None, {"fields": ("email", "password")}),
        ("Permissions", {"fields": ("is_admin", "groups", "user_permissions")}),
    )


admin.site.register(CustomUser, CustomUserAdmin)

forms.py

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, UserChangeForm


class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = get_user_model()
        fields = ("email", "username")


class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = get_user_model()
        fields = ("email", "username")

【问题讨论】:

    标签: python django authorization


    【解决方案1】:

    我遇到了同样的问题:

    1. 创建了我自己的用户模型
    2. 在管理员中,组和我的用户模型未列在同一 (auth) 部分中

    我的解决方案基本上是将 django 组放入我的应用程序中,使其显示在同一部分,因为 django 为每个应用程序创建管理部分。

    1. models.py 中创建自己的组模型作为代理对象
    from django.contrib.auth.models import Group as DjangoGroup
    
    ...
    
    class Group(DjangoGroup):
        class Meta:
            proxy = True
            verbose_name = _('group')
            verbose_name_plural = _('groups')
    
    1. (取消)在admin.py 中注册您的模型
    from django.contrib.auth.admin import GroupAdmin as DjangoGroupAdmin
    from django.contrib.auth.models import Group as DjangoGroup
    from .models import CustomUser, Group
    
    ...
    
    admin.site.register(CustomUser, CustomUserAdmin)
    
    admin.site.unregister(DjangoGroup)
    admin.site.register(Group, DjangoGroupAdmin)
    

    【讨论】:

    • 什么是_?
    • 它现在列出了同一管理部分下的组和用户。 . .但它对身份验证没有任何作用,它实际上从 url localhost:8000/admin/auth/ 中删除了组,因此呈现为 404
    • _ 用于翻译,你可以使用字符串。
    • 在我的解决方案中,您不再使用 django auth 应用程序,因为其目的是将用户和组与您自己的应用程序一起放置。我找不到合适的解决方案,您可以在 django 部分/应用程序(如 djangos auth 应用程序)中显示自己的模型。整个问题的存在是因为 django 将应用程序的模型组合在一起,而您尝试将模型组合到另一个应用程序中。
    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 2010-10-24
    • 1970-01-01
    • 2014-12-25
    • 2017-03-27
    • 1970-01-01
    • 2017-11-10
    • 2017-11-27
    相关资源
    最近更新 更多