2011-07-15 9 views
3

現在、Djangoのユーザープロファイルに問題があります。Djangoのユーザープロファイル保存時のインライン作成の整合性エラー

私は勧告に続き、ユーザ・プロファイル作成:

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    is_teacher = models.BooleanField(verbose_name = "Teacher", help_text = "Designates whether this user is a teacher and can administer and add students and classes") 
    school = models.ForeignKey(School) 

    def __unicode__(self): 
     return self.user.username 

    def save(self, *args, **kwargs): 
     if not self.pk: 
      try: 
       p = UserProfile.objects.get(user=self.user) 
       self.pk = p.pk 
      except UserProfile.DoesNotExist: 
       pass 

     super(UserProfile, self).save(*args, **kwargs) 

を私も自分のユーザー管理ページには、このユーザープロファイルをインライン化。これは私がユーザープロファイルは、ユーザーと一緒に作成されていることを確認するために使用するものです:私は、新しいユーザーを追加するために行くとき

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

問題が発生します。学校のフィールドを追加する前に、私はすべてを埋めることができたし、それはうまくいくはずです。学校のフィールドを追加した後、私は、userprofile.school_idがnullでないことを示すIntegrityErrorを取得します。私はここでどこが間違っていますか?

私は、学校の選択がget_or_createに渡されていないと考えているので、UserProfileを作成するときは何も見えません。 is_teacherのチェックボックスをクリックすると、それまでどのように動作しましたか?また、これを修正するにはどうすればいいですか?

答えて

2

はい、学校の選択は渡さ取得されていない、ここに渡さなっていない:

UserProfile.objects.get_or_create(user=instance) 

あなたはユーザーのみの設定、およびプロファイルを作成しようとしています。

学校のフィールドにnull=True, blank=Trueを追加、または学校の選択は何であったかを把握し、合格点で:

UserProfile.objects.get_or_create(user=instance, school=school) 
関連する問題