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

时间:2016-01-03 14:01:53

标签: python django django-models django-admin django-users

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

现在,当我创建一个名为Thomas的UserTranslatorProfile时,我可以在Users Auth的{​​{1}}中看到他的姓名,用户名等,以及其他属性属于Django Admin中的个人资料,非常不舒服。 (在UserTranslatorProfiles我可以看到它是哪个用户,但我看不到他的属性,也无法改变它们。

这两个档案在这里:

UserTranslatorProfile

他们当然在class UserTranslatorProfile(models.Model): user = models.OneToOneField(User) languages = models.ManyToManyField(Language) class UserCustomerProfile(models.Model): user = models.OneToOneField(User)

注册

所以问题是:通过点击admin.py中的User,是否有可能以及如何查看所有UserProfileUserProfile属性?

3 个答案:

答案 0 :(得分:2)

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

ModelAdmin放在admin.py文件中,并进一步自定义模型在管理中的显示方式。

    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)

答案 1 :(得分:0)

只需要设置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-objects

答案 2 :(得分:0)

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

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

如果您无法这样做,我可以考虑另外两个方向:

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

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

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