我正在做一个Django
项目。我有两种类型的成员(用户配置文件)-客户和翻译人员。我想在Django Admin中看到这些配置文件,包括它的用户属性,如username
、surename
等。
现在,当我创建名为Thomas
的UserTranslatorProfile时,我可以在Django Admin
的Auth
中的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
,是否可以查看所有User
和UserProfile
属性?
为UserTranslatorProfiles
添加ModelAdmin
,并将username
、email
和其他相关字段添加到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()