新しいユーザーがサインアップしたときに、各ユーザーに関する追加情報を自動的に保存するのに問題があります。ユーザーに関する追加データを保存するために、ユーザー モデル拡張のプロファイルを作成しました。ただし、シグナル ハンドラが post_save で呼び出されると、リクエストに格納されたデータは signal_handler に渡されません。
以下は私が作成したプロファイルです。
class StudentProfile(models.Model):
user = models.ForeignKey(User, unique=True)
# Other information about the Student
city = models.CharField(max_length=25)
country = models.CharField(max_length=25)
student_age = models.IntegerField(max_length=3)
私のサインアップ ビューでは、ユーザー オブジェクトが作成され、新しい行がデータベースに追加される form.save() 関数を呼び出します。
def save(self, new_data):
u = User.objects.create_user( new_data['username'],
new_data['email'],
new_data['password'])
return u
その後、post_save シグナルが呼び出され、シグナル ハンドラーが新しいプロファイルの作成を試みます。
def create_student_profile(sender, instance, created, **kwargs):
if created:
StudentProfile.objects.create(user=instance)
post_save.connect(create_student_profile, sender=User)
この時点で、ブラウザに次のエラーが表示されます。
/signup/ での IntegrityError (1048、「列 'student_age' を null にすることはできません」)
コール スタックを調べたところ、実行されている SQL クエリの Student_age の値が None で、country と city の値が何もないことがわかりました。
sql u'INSERT INTO student_studentprofile
( user_id
, city
, country
, student_age
) VALUES (17, , , なし)'
Student_age、country、city などのリクエスト パラメータをこのシグナル ハンドラに渡すにはどうすればよいですか? この情報を手動で保存する必要がありますか?
この質問の答えをstackOverflowとGoogleで徹底的に検索しましたが、手ぶらで来ました。
ご協力いただきありがとうございます。