2011-07-15 13 views
0

私は2つのモデル、SchoolProfileとUserProfilesを持っています。ここで、UserProfilesにはForeignKey to Schoolがあります。 Django Adminでは、私は学校を選び、外部キーを持っているすべてのuserprofilesを表示させたいと思っています。Django管理者のインライン外部キーフィールドの追加/編集に関する問題

私がやったやり方は、モデルがUserProfileである新しいInlineを作成し、それを新しいSchoolAdminに追加して登録することでした。

私は新しいuserprofileを追加するときに問題が発生します。何が起こるかは、ドロップダウンボックスから既存のユーザーを選択して[保存]をクリックすることです。しかし、「このユーザーのユーザープロファイルは既に存在します」というエラーが表示されます。

保存すると、自分が選択したユーザーの新しいユーザープロファイルを作成しようとしているようです。私はこれを間違ったやり方にするつもりですか?

ここでは、ユーザー作成時にユーザープロファイルを自動作成するように設定したコードを示します。

def create_user_profile(sender, instance, created, **kwargs): 
"""Create the UserProfile when a new User is saved""" 
    print "User Profile Creation: False" 
    if created: 
     print "User Profile Creation: ", created 
     UserProfile.objects.get_or_create(user=instance) 



post_save.connect(create_user_profile, sender=User) 

EDIT:デバッグのためにプログラムフローをトレースするにはどうすればいいですか?私は単なる印刷ステートメントを扱うのが難しいと思う。

答えて

1

あなたが間違って設定したものはわかりません。しかし、エラーメッセージはヒントになるはずです。ある時点で、ユーザーX用のユーザープロファイルを作成してから、別のユーザープロファイルを作成しようとしました。 djangoはユーザ用のプロファイルを自動作成しないので、これはあなたが書いたコードでなければならないことに注意することが重要です。

コードを見ることなく、私はここで暗く撮影しています。ユーザーモデルにpost_save信号を登録したなど、これらのプロファイルを作成する方法は複数あります。実際のクラッシュ後 http://docs.python.org/library/pdb.html

または、いくつかのクールのために、それは私が私が使用したコードを追加しましたhttp://packages.python.org/django-extensions/runserver_plus.html

+0

にWERKZEUGデバッガビルドの実装だとあなたはhttp://packages.python.org/django-extensions/を試みることができるデバッグ:トレース用として

ユーザープロファイルの自動作成しかし、エラーが発生したときに私のprintステートメントが実行されないのは面白いことです。 – CCSab

+0

ええ、あなたはget_or_createを使って安全な呼び出しを行うように思われるので、他のどこかで他の何かが起きている可能性が高いので、コード(またはサードパーティのアプリケーション) 。 – John

+0

私が使用している唯一のサードパーティのアプリケーションは、移行を処理するためのSouthです。これが問題になるかどうかは不明です。 – CCSab

関連する問題