csvファイルからアプリケーションのユーザを一括生成する必要があります。私は「脱水」メソッドで使用することを期待していた機能を持っているユーザ名を生成するにはDjangoインポートエクスポートはユーザcsvアップロードの前にユーザ名を生成します
LAST_NAME、FIRST_NAME、電子メール
:私はcsvファイルは、次のフィールドが含まれています。脱水方法は、輸入でのみ機能し、輸入では機能しません。
[編集] @ sanca-kembangの後に私がやったのは以下の答えです。以下の例は完全に動作します(django 1.10.5、python 3.6.0)。
tools.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
admin.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)
あなたはすべてのエラーを取得している、明確にしてください? – Sourabh
エラーはありません。インポートしようとすると、脱水方法は無視されます。しかし、エクスポートでうまく動作します。それは輸入に取り組むことになっていますか? – jcuot
'pre_save'または' post_save' djangoシグナルを使ってこれを行うことができます。 – Bitonator