我以这种方式定义了UserProfile
class UserProfile(models.Model):
user = models.OneToOneField(User)
Run Code Online (Sandbox Code Playgroud)
该模型在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 %}
Run Code Online (Sandbox Code Playgroud)
它告诉我们,默认情况下,您可以在对象创建后添加更多信息。
这也是表格:
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')}
),
)
Run Code Online (Sandbox Code Playgroud)
给出结果,但这不是很好,因为我们编辑了django的源代码。
因此,在我的admin.py中,我这样写:
from django.contrib.auth.admin import UserAdmin
UserAdmin.add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2', 'first_name', 'last_name')}
),
)
Run Code Online (Sandbox Code Playgroud)
这有点hacky,但是做得很好。
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |