私はpostgresql9.1でDjango1.4.1を使用しています。
authアプリで指定されたユーザーにプロファイルを追加し、管理者アプリがこのプロファイルを作成および編集できるようにする必要があります。したがって、私はドキュメントセクションに従っていますユーザーに関する追加情報の保存:
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
bio = models.TextField(null = True, blank = True)
contact = models.TextField(null = True, blank = True)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
settings.py
...
AUTH_PROFILE_MODULE = 'userprofile.UserProfile'
...
django.contrib.auth
でとdjango.contrib.admin
アプリもアクティブにしましたINSTALLED_APPS
。
admin.py
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'profile'
class UserAdmin(UserAdmin):
inlines = (UserProfileInline, )
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
問題
ここで、管理アプリを実行して新しいユーザーを追加(作成)するように要求すると、 2つのステップのプロセスでユーザーを作成するように求められます。最初に、ユーザー名、パスワード(2回)、および私の2つのUserProfileフィールド。
ユーザー名とパスワードのみ(2回)を入力して[保存]をクリックすると、プロセスの2ページ目が表示され、他のすべてのユーザーフィールドとユーザープロファイルフィールドに入力できます。「ユーザー「xxxxx」が正常に追加されました。以下で再度編集できます。」というメッセージが表示されます。幸い、両方のモデルのフィールドを編集できます。これで機能します。
しかし、最初のページのUserProfileフィールドの一方または両方に何かを入力しようとすると、送信は次のメッセージで失敗します。
IntegrityError at /admin/auth/user/add/
duplicate key value violates unique constraint "userprofile_userprofile_user_id_key"
DETAIL: Key (user_id)=(7) already exists.
「7」は、試すたびにインクリメントされます。
この動作を回避するにはどうすればよいですか。あるいは、プロファイルフィールドを最初のページで編集可能にせず、2番目のページで編集できるようにするにはどうすればよいですか。
完全なトレースバック:
環境: リクエスト方法:POST リクエストURL:http://127.0.0.1:8000/admin/auth/user/add/ Djangoバージョン:1.4.1 Pythonバージョン:2.7.3 インストールされているアプリケーション: ('django.contrib.auth'、 'django.contrib.contenttypes'、 'django.contrib.sessions'、 'django.contrib.messages'、 'django.contrib.staticfiles'、 'django.contrib.admin'、 'django.contrib.admindocs'、 'userprofile') インストールされているミドルウェア: ('django.middleware.common.CommonMiddleware'、 'django.contrib.sessions.middleware.SessionMiddleware'、 'django.middleware.csrf.CsrfViewMiddleware'、 'django.contrib.auth.middleware.AuthenticationMiddleware'、 'django.contrib.messages.middleware.MessageMiddleware') トレースバック: get_responseのファイル「/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py」 111. response = callback(request、* callback_args、** callback_kwargs) ラッパー内のファイル「/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py」 366. return self.admin_site.admin_view(view)(* args、** kwargs) _wrapped_viewのファイル「/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py」 91. response = view_func(request、* args、** kwargs) _wrapped_view_funcのファイル"/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" 89. response = view_func(request、* args、** kwargs) 内部のファイル「/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py」 196. return view(request、* args、** kwargs) sensitive_post_parameters_wrapperのファイル「/usr/local/lib/python2.7/dist-packages/django/views/decorators/debug.py」 69. return view(request、* args、** kwargs) _wrapperのファイル"/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" 25. return bound_func(* args、** kwargs) _wrapped_viewのファイル「/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py」 91. response = view_func(request、* args、** kwargs) bound_funcのファイル「/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py」 21. return func(self、* args2、** kwargs2) 内部のファイル「/usr/local/lib/python2.7/dist-packages/django/db/transaction.py」 209. return func(* args、** kwargs) add_viewのファイル「/usr/local/lib/python2.7/dist-packages/django/contrib/auth/admin.py」 114. extra_context) _wrapperのファイル"/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" 25. return bound_func(* args、** kwargs) _wrapped_viewのファイル「/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py」 91. response = view_func(request、* args、** kwargs) bound_funcのファイル「/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py」 21. return func(self、* args2、** kwargs2) 内部のファイル「/usr/local/lib/python2.7/dist-packages/django/db/transaction.py」 209. return func(* args、** kwargs) add_viewのファイル「/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py」 956. self.save_related(request、form、formsets、False) save_relatedのファイル「/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py」 733. self.save_formset(request、form、formset、change = change) save_formsetのファイル「/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py」 721. formset.save() 保存中のファイル「/usr/local/lib/python2.7/dist-packages/django/forms/models.py」 497. return self.save_existing_objects(commit)+ self.save_new_objects(commit) save_new_objectsのファイル「/usr/local/lib/python2.7/dist-packages/django/forms/models.py」 628. self.new_objects.append(self.save_new(form、commit = commit)) save_newのファイル「/usr/local/lib/python2.7/dist-packages/django/forms/models.py」 731. obj.save() 保存中のファイル「/usr/local/lib/python2.7/dist-packages/django/db/models/base.py」 463. self.save_base(using = using、force_insert = force_insert、force_update = force_update) save_baseのファイル「/usr/local/lib/python2.7/dist-packages/django/db/models/base.py」 551. result = manager._insert([self]、fields = fields、return_id = update_pk、using = using、raw = raw) _insertのファイル"/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" 203. return insert_query(self.model、objs、fields、** kwargs) insert_queryのファイル「/usr/local/lib/python2.7/dist-packages/django/db/models/query.py」 1576. return query.get_compiler(using = using).execute_sql(return_id) execute_sqlのファイル「/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py」 910. cursor.execute(sql、params) 実行中のファイル「/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py」 40. return self.cursor.execute(sql、params) 実行中のファイル「/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py」 52. return self.cursor.execute(query、args) 例外タイプ:/ admin / auth / user /add/のIntegrityError 例外値:重複するキー値が一意の制約「userprofile_userprofile_user_id_key」に違反しています 詳細:キー(user_id)=(7)はすでに存在します。`