2012-01-20 14 views
4

私が達成しようとしているのは、プロファイルモデルを教師または学生にさらに拡張したいということです。サインアップフォームには、彼が先生か学生かを選択する選択欄が追加されました。以下は私のモデル構造です。Userena - さらに2つの異なるモデルまでプロファイルモデルを拡張する

class Profile(UserenaLanguageBaseProfile):   
    """ Default profile """ 
    GENDER_CHOICES = (
      (1, _('Male')), 
      (2, _('Female')), 
     ) 

    user = models.OneToOneField(User, 
           unique=True, 
           verbose_name=_('user'), 
           related_name='profile') 

    gender = models.PositiveSmallIntegerField(_('gender'), 
               choices=GENDER_CHOICES, 
               blank=True, 
               null=True) 

class Teacher(Profile): 
    profile = models.OneToOneField(Profile, 
           unique=True, 
           verbose_name=_('profile'), 
           related_name='teacher') 

    home_address = models.CharField(_('home_address'), max_length=255, blank=True) 
    home_phone = models.CharField(_('home_phone'), max_length=30, blank=True) 
    cell_phone = models.CharField(_('cell_phone'), max_length=30, blank=True) 
    experience = models.IntegerField(default = 0) 
    summary = models.TextField(_('summary'), max_length=500, blank=True) 

class Student(Profile): 
    profile = models.OneToOneField(Profile, 
           unique=True, 
           verbose_name=_('profile'), 
           related_name='student') 

    grade = models.CharField(_('grade'), max_length=50, blank=True) 

私のようにメソッド保存サインアップをオーバーライドしています:

def save(self): 
     new_user = super(SignupFormExtra, self).save() 
     new_user.first_name = self.cleaned_data['first_name'] 
     new_user.last_name = self.cleaned_data['last_name'] 
     new_user.save() 

     if self.cleaned_data['teacher_or_student'] == 'teacher': 
      teacher = Teacher(profile = new_user.get_profile()) 
      teacher.save() 
     elif self.cleaned_data['teacher_or_student'] == 'student': 
      student = Student(profile = new_user.get_profile()) 
      student.save() 
     return new_user 

はteacher.save()またはstudent.save()メソッドが呼び出されると、それは整合性エラーを発生させている "1048年(" コラム'user_id'はnullにはできません ")"私はここで私は先生や学生モデルに新しく作成されたprofile_idを割り当てようとしているここで新しいユーザーインスタンスを作成していません。私は間違ったやり方でやっているのですか?私は何をすべきか?

答えて

3

エラーとして、StudentまたはTeacheruserなしで作成することはできませんが、null不可のフィールドとして定義しています。

あなたはnew_userあなたが定義したクラスを渡していることを確認してください。..

# ... 
new_user.save() 

if self.cleaned_data['teacher_or_student'] == 'teacher': 
    teacher = Teacher(profile = new_user.get_profile(), user=new_user) 
    teacher.save() 
elif self.cleaned_data['teacher_or_student'] == 'student': 
    student = Student(profile = new_user.get_profile(), user=new_user) 
    student.save() 
+0

私はとてもダムです。時にはこれらの小さなものは頭痛を与えます。ありがとう、たくさんの友達。 +1 –

2

私は間違っているかもしれませんが、あなたはProfileモデルからモデルをサブクラス化しない理由(あなたが「ユーザー」を持っていますフィールドをもう一度入力してください)、プロファイルモデルの「プロファイル」OneToOneFieldフィールドをもう一度入力した直後ですか?

関連する問題