我通过这种方式定义了UserProfile
class UserProfile(models.Model):
user = models.OneToOneField(User)
此模型已在admin中注册。当我从UserProfile添加用户时(例如,在用户下拉菜单附近单击+),我会看到一个弹出窗口,其中只有电子邮件和两个密码对。有什么办法可以在同一弹出窗口中获取first_name和last_name?他们为什么失踪?
注意:我正在项目内部使用emailusernames
应用程序
尝试在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,但是做得很好。
根据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)