如何设置 Django 管理员以在他的用户配置文件选项卡中显示所有用户的属性?



我正在做一个Django项目。我有两种类型的成员(用户配置文件)-客户和翻译人员。我想在Django Admin中看到这些配置文件,包括它的用户属性,如usernamesurename等。

现在,当我创建名为Thomas的UserTranslatorProfile时,我可以在Django AdminAuth中的Users中看到他的名字、用户名等,在UserTranslatorProfiles中看到属于它的配置文件的其他属性,这很不舒服。(在UserTranslatorProfile中,我可以看到是哪个用户,但我看不到他的属性,也无法更改它们)。

这里有两个配置文件:

class UserTranslatorProfile(models.Model):
    user = models.OneToOneField(User)
    languages = models.ManyToManyField(Language)
class UserCustomerProfile(models.Model):
    user = models.OneToOneField(User)

它们当然在admin.py 中注册

所以问题是:点击Django-Admin中的UserProfile,是否可以查看所有UserUserProfile属性?

UserTranslatorProfiles添加ModelAdmin,并将usernameemail和其他相关字段添加到fields属性中。

CCD_ 20被放在CCD_ 21文件中,它们进一步定制了模型在管理员中的显示方式。

    from django.contrib import admin
    from myproject.myapp.models import UserTranslatorProfiles # Import your model
    class UserTranslatorProfilesAdmin(admin.ModelAdmin):
        fields = ('username', 'email, ) # Enter full list of fields here
    admin.site.register(UserTranslatorProfiles, UserTranslatorProfilesAdmin)

只需设置ModelAdmin并在管理站点注册即可

step 1:在应用程序中创建一个admin.py(如果不存在)
step-2:导入您想要在管理站点上显示的模型
step-3:创建一个管理模型并将其注册到管理站点

from django.contrib import admin
from myproject.myapp.models import Author #import your model
class AuthorAdmin(admin.ModelAdmin):
      fields = ('name', 'title', 'view_birth_date')# define-fields

admin.site.register(Author, AuthorAdmin) #now register your custom-admin model

了解更多
https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#modeladmin-对象

不幸的是,这比需要/应该的更困难。如果没有内联管理员,管理员添加/更改表单只能用于编辑一个模型。

如果您能够更改用户模型,则可以通过创建从user继承的自定义user对象来实现这一点。然后,在settings.py中,将AUTH_USER_MODEL设置为新模型。请注意,这应该在数据输入之前完成,并且您的第一次迁移已经完成(因此您需要重新开始。)

如果你做不到,我可以想出另外两个方向:

更简单:为User对象创建一个内联管理员,并将其注册到您的翻译对象中。然后,您将在页面底部的内联管理中有一行,可用于编辑用户。从最终用户体验的角度来看,我讨厌这样,但它可以完成任务。

整洁:创建一个自定义表单,添加与用户模型中要编辑的字段相对应的字段,然后在表单的清理和保存方法中,验证/保存底层用户对象的方法。例如,创建表单字段"tra_username"、"tra_firstname"、"tra_password"。。。然后,在表单的保存方法中(验证后),对每个字段执行此操作

UserCustomProfile.user.first_name = form.cleaned_data.get("tra_firstname")`
UserCustomProfile.user.save()

最新更新