我有这样定义的UserProfile
class UserProfile(models.Model):
user = models.OneToOneField(User)
此模型已在admin中注册。当我从UserProfile添加用户时(例如,点击用户下拉菜单附近的+),我会收到一个弹出窗口,只有电子邮件和两个密码对。 有没有办法在同一个弹出窗口中获取first_name和last_name?他们为什么失踪?
注意:我在项目中使用emailusernames
应用程序
答案 0 :(得分:4)
尝试在admin/auth/user/add/
添加用户。
您将在弹出窗口中看到您在用户名和密码中看到的内容。
创建用户后,您将被重定向到创建的用户,您可以在其中填写其他信息。
查看django管理模板来源:
{% block form_top %}
{% if not is_popup %}
<p>{% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}</p>
{% else %}
<p>{% trans "Enter a username and password." %}</p>
{% endif %}
{% endblock %}
它告诉我们,默认情况下,您可以在创建对象后添加更多信息。
这里也是表格:
django.contrib.auth.forms.UserChangeForm
和django.contrib.auth.forms.UserCreationForm
它告诉我们同样的事情。
在django.contrib.auth.admin.UserAdmin上替换add_fieldsets
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2', 'first_name', 'last_name')}
),
)
给出了结果,但它并不好,因为我们编辑了django的源代码。
所以在我的admin.py上我写了这个:
from django.contrib.auth.admin import UserAdmin
UserAdmin.add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2', 'first_name', 'last_name')}
),
)
有点hacky,但做得很好。
答案 1 :(得分:0)
根据Django documentation,您可以扩展UserAdmin
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
class UserAdmin(BaseUserAdmin):
add_fieldsets = BaseUserAdmin.add_fieldsets + (
(None, {
'fields': ('first_name', 'last_name',)
}),
)
并注销用户
admin.site.unregister(User)
并使用新的UserAdmin注册
admin.site.register(User, UserAdmin)
您还可以在UserAdmin中添加UserProfile
from .models import UserProfile
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'user profile'
class UserAdmin(BaseUserAdmin):
inlines = (UserProfileInline,)
add_fieldsets = BaseUserAdmin.add_fieldsets + (
(None, {
'fields': ('first_name', 'last_name',)
}),
)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)