Django 手动创建用户账户
Django自带一个管理页面,里面有一个功能可以添加、编辑或删除用户(以及用户的认证信息)。
不过,我需要创建一个自定义的表单,涉及到以下模型:
employee/models.py
# Stores profile details such as DoB, Martial Status, TFN and so on
class Profile(models.Model):
user = models.OneToOneField(User)
MARTIAL_STATUS = (
('s', 'Single'),
('m', 'Married'),
('d', 'Divorced'),
('w', 'Widowed')
)
martial = models.CharField(max_length=1, choices=MARTIAL_STATUS, null=True)
tfn = models.CharField(max_length=200, blank=False)
我想做的是有一个表单,用户可以在里面输入用户名、名字等信息,以及我模型中需要的所有字段。
到目前为止,这是我所做的
注意,必须先创建一个账户,才能插入其他信息(来自不同的模型)。
补充一下:我使用的是Django 1.6版本。
3 个回答
在user
模型的下拉框旁边应该有一个+
符号,这样用户可以快速添加,就像下面这个图示。
如果user
模型已经在admin
中注册了,我觉得你可以直接创建它。
或者
根据Ruddra上面的回答,你需要先创建所有用户的资料,然后就可以直接填写表单了。
我通常会从文档中的完整示例开始,然后根据我的需求进行调整。这样你可以保留Django的权限功能,同时还可以添加一些自定义权限。
我不知道你在项目进展到什么阶段,但如果你刚开始的话,我建议你使用twoscoops模板或者Daniel Greenfield的cookiecutter-django。这两个模板都实现了django all auth库,非常适合用来做社交登录。
如果我理解得没错,你需要为你的管理员网站的个人资料表单创建自定义用户。为什么不试试使用django的命令行呢?比如:
在manage.py所在的文件夹,打开终端或命令提示符,然后输入:
>>python manage.py shell
In [1]: from django.contrib.auth.models import User
In [2]: i=User(username="test")
In [3]: i.save()
In [4]: i.set_password('test')
In [5]: i.save()
你可以用这个用户名和密码登录网站。
编辑:
假设你的管理员网址是 www.mysite.com/admin,你可以直接通过这个链接访问用户管理: www.mysite.com/admin/auth/user/add/。管理员界面看起来是这样的: 。
如果你想添加电子邮件地址和其他信息,可以点击 保存并继续编辑
,如下图所示:
这会让你进入更新用户信息的页面。
如果你想在管理员网站之外创建用户,那么使用 UserCreationForm 是一种更简单的方法来实现用户注册。
from django.views.generic.edit import CreateView
from django.contrib.auth.forms import UserCreationForm
urlpatterns = patterns('',
url('^register/', CreateView.as_view(
template_name='register.html',
form_class=UserCreationForm,
success_url='/'
)),
url('^accounts/', include('django.contrib.auth.urls')),
# rest of your URLs as normal
)
不过你需要在这里创建一个 register.html,像这样:
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create" />
</form>