Django 1.9批量创建新用户没有正确散列密码

Jac*_*ans 3 python django

我想从文件中读取一些数据以快速创建许多测试帐户.我更喜欢使用bulk_create方法,因为这对于向模型添加许多记录来说通常要快得多.但是,当使用带有Django用户模型的bulk_create方法时,密码没有正确散列,这意味着我无法以用户身份登录和注销.

    User.objects.bulk_create([
        User(
            username=name,
            email='sample@email.co.uk',
            password='Sample&Password!',
            is_active=True,
        ) for name in f.read().splitlines()
    ])
Run Code Online (Sandbox Code Playgroud)

Django admin在每个用户的密码字段中显示以下错误

无效的密码格式或未知的散列算法.

然而,第二种方法继续工作(尽管速度慢得多).

    for name in f.read().splitlines():
        User.objects.create_user(
            name,
            'sample@email.co.uk',
            password="Sample&Password!"
        ).save()
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法在Django中一次性批量创建用户.Django出于某种原因是出于某种原因还是这个错误?

小智 11

使用make_password.这可确保散列密码存储在数据库中.如果make_password太慢,请看这个

from django.contrib.auth.hashers import make_password

User.objects.bulk_create([
    User(
        username=name,
        email='sample@email.co.uk',
        password=make_password('Sample&Password!'),
        is_active=True,
    ) for name in f.read().splitlines()
])
Run Code Online (Sandbox Code Playgroud)