【发布时间】:2022-10-25 18:23:44
【问题描述】:
我的 Profile 模型与 Django 的内置 User 模型有 OneToOne 关系。
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
verified = models.BooleanField(default=False)
如果我想更改用户的密码或Active 或Superuser 之类的属性,我必须在一个更改用户页面中进行,而要编辑verified 属性,我必须转到另一个页面。
有没有办法合并这个:
和这个:
放入一个表单中,以便我可以在一页中编辑有关用户的所有内容?
编辑 1:
正如你们建议的StackedInline 方法,让我们看看结果如何。
请先查看 Django 的默认 Admin 站点(上图第一张截图):
- 所有内容都按部分分组,部分有标题。
- 看看密码信息是如何显示的。
- 有一个更改密码的链接。
现在我实施
StackedInline解决方案。请注意,这是在我的
myapp的admin.py中:from django.contrib import admin from .models import Profile from django.contrib.auth.models import User # Register your models here. class ProfileInline(admin.StackedInline): model = Profile class UserAdmin(admin.ModelAdmin): inlines = (ProfileInline, ) admin.site.unregister(User) admin.site.register(User, UserAdmin)现在让我们看一下管理站点:
- 一切都散了。部分及其标题已消失(个人信息、权限等)。
- 密码字段显示散列密码。所有其他信息都消失了。
- 没有更改密码的链接。
编辑 2:
为了解决问题编辑 1我查看了 Django (https://github.com/django/django/blob/main/django/contrib/auth/admin.py) 的源代码并添加更新我的代码如下:
class UserAdmin(admin.ModelAdmin): inlines = (ProfileInline, ) fieldsets = ( (None, {"fields": ("username", "password")}), (("Personal info"), {"fields": ("first_name", "last_name", "email")}), ( ("Permissions"), { "fields": ( "is_active", "is_staff", "is_superuser", "groups", "user_permissions", ), }, ), (("Important dates"), {"fields": ("last_login", "date_joined")}), ) add_fieldsets = ( ( None, { "classes": ("wide",), "fields": ("username", "password1", "password2"), }, ), ) filter_horizontal = ( "groups", "user_permissions", ) admin.site.unregister(User) admin.site.register(User, UserAdmin)我现在有二管理站点中的部分:
顶部的部分几乎显示了所有内容(除了密码字段仍然不同并且没有更改密码的链接以及
verified字段是不是那里)但部分和标题又回来了。然后是这个额外且完全不必要的部分:
如你看到的:
- 有关用户的所有信息字段都重复
- 查看密码字段
- 信息未按标题分组
-
verified归档出现。
【问题讨论】:
标签: python django django-models django-admin django-contrib