我需要从 csv 文件为我的应用批量生成用户。我拥有的 csv 包含以下字段:
姓氏、名字、电子邮件
为了生成用户名,我有一个希望在“脱水”方法中使用的函数。脱水方法仅适用于出口,不适用于进口。
[编辑] 在@sanca-kembang 给出下面的答案后,这就是我最终要做的。下面的示例完美运行(django 1.10.5,python 3.6.0)。
工具.py
from django.contrib.auth.models import User
def generate_username(first_name, last_name):
fname = first_name.lower()
lname = last_name.lower()
prefix = "%s%s" % (fname[0], lname)
username = prefix
i = 2
while User.objects.filter(username = username).exists():
username = "%s%d" % (prefix, i)
i += 1
return username
管理员.py
from django.contrib.auth.models import User
from import_export import resources, widgets
from import_export.admin import ImportExportModelAdmin
from .tools import generate_username
class UserResource(resources.ModelResource):
class Meta:
model = User
skip_unchanged = True
report_skipped = True
fields = ('id', 'last_name', 'first_name', 'email', 'username')
def import_obj(self, obj, data, dry_run):
first_name = data.get('first_name')
last_name = data.get('last_name')
username = generate_username(first_name, last_name)
for field in self.get_fields():
if isinstance(field.widget, widgets.ManyToManyWidget):
continue
if field.column_name == 'username':
data.update({'username': username})
print(obj)
self.import_field(field, obj, data)
class UserAdmin(ImportExportModelAdmin):
resource_class = UserResource
admin.site.unregister(User)
admin.site.register(User, UserAdmin)