创建Django管理员帐户:密码的空值

时间:2016-05-18 15:15:25

标签: django

在Django项目中,我有以下脚本来创建admin帐户:

User.objects.all().delete()
admin = User()
admin.username = 'admin'
admin.password = admin.set_password('admin')
admin.save()

但是我收到了错误消息:

psycopg2.IntegrityError: null value in column "password" violates not-null constraint

为什么?

2 个答案:

答案 0 :(得分:5)

来自the docs

  

set_password(raw_password):      将用户的密码设置为给定的原始字符串,并处理密码哈希。

它为您设置密码,然后返回None,因此请勿将其分配回user.password。换句话说,就是这样做:

admin.username = 'admin'
admin.set_password('admin')
admin.save()

答案 1 :(得分:4)

.set_password()已经设置了给定用户的密码,因此不会返回任何内容。因此,您应该这样做:

>>> admin.set_password('admin')
>>> admin.save()

假设您要创建一个拥有所有权限的用户,为什么不使用.create_superuser()代替:

>>> User.objects.create_superuser(username="admin", password="admin", email=None)

因此,您不必手动将.is_superuser.is_staff设置为True