我正在开展一个Django
项目。我有两种类型的成员(用户配置文件) - 客户和翻译。我希望在Django Admin中看到这些配置文件,包括用户属性,如username
,surename
等。
现在,当我创建一个名为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
,是否有可能以及如何查看所有UserProfile
和UserProfile
属性?
答案 0 :(得分:2)
为UserTranslatorProfiles
添加ModelAdmin
,并将username
,email
和其他相关字段添加到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()