问题描述
我想使用导入导出模块 Django 的 CSV 文件创建一个新用户的登录名和随机/相同的密码。我已经尝试了很多例子,但没有用。你能提出什么建议吗?我什至尝试在导入 csv 文件中创建密码字段。让我知道您可以分享的任何教程/链接来实现这一目标。
解决方法
如果您想用虚拟数据填充数据库,python 中有一个名为 faker 的模块。 这是一个小代码片段,展示了如何使用 faker:
import os
# Configure settings for project
# Need to run this before calling models from application!
os.environ.setdefault('DJANGO_SETTINGS_MODULE','(YOUR DJANGO PROJECT).settings')
import django
# Import settings
django.setup()
import random
from (YOUR DJANGO APP).models import User
from faker import Faker
fakegen = Faker()
def populate(N=5):
for entry in range(N):
# Create Fake Data for entry
fake_name = fakegen.name().split()
fake_first_name = fake_name[0]
fake_last_name = fake_name[1]
fake_email = fakegen.email()
# Create new User Entry
user = User.objects.get_or_create(first_name=fake_first_name,last_name=fake_last_name,email=fake_email)[0]
if __name__ == '__main__':
print("Populating the databases...")
populate(20)
print('Populating Complete')
,
django-import-export 包含 several hooks,您可以使用它在插入数据库之前操作数据。这似乎是为每个用户生成随机密码的理想方式。
您可以将其与 Django 的 make_random_password()
函数结合使用。在导入电子表格中设置密码似乎不是一个好主意,但您可能出于某种原因需要这样做。
您需要创建自己的资源子类,并覆盖 before_save_instance()
,例如:
class UserResource(resources.ModelResource):
def before_save_instance(self,instance,using_transactions,dry_run):
pw = User.objects.make_random_password()
instance.set_password(pw)
class Meta:
model = User
fields = ('id','username','password')
import_id_fields = ['id']