2017-09-26 15 views
1

これはおそらく意味がありませんが、この動作を適切に実装する方法をアドバイスする方がよいでしょう。
私はUserモデルと2つのモデルを持っています(AB)。 ABの両方がForeignKeyUserです。 User作成時に、私はまた、このユーザーのABを作成:AB2つのModelFormsを1つのCreateViewに作成

def save(self, *args, **kwargs): 
    user_id = self.id 
    super(User, self).save(*args, **kwargs) 
    if user_id is None: 
     as_A = A(user=self) 
     as_A.save() 
     as_B = B(user=self) 
     as_B.save() 

唯一の必須フィールドがuser = models.OneToOneField(User)で、他はオプションです。

class A(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    x = models.CharField(max_length=100, blank=True) 

class B(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    y = models.CharField(max_length=100, blank=True) 

私は登録のための2つのフォームを提供したい:Aとして、またはBとして登録フォームでAとして、顧客がUserに関連Aモデルエンティティのフィールドを設定することができるはずです。 B.

のための同様のこれが私のRegistrationForm次のとおりです。

class RegistrationForm(forms.ModelForm): 
    password = forms.CharField(
     strip=False, 
     widget=forms.PasswordInput, 
    ) 
    confirm_password = forms.CharField(
     strip=False, 
     widget=forms.PasswordInput 
    ) 

    class Meta: 
     model = User 
     fields = ['email', 'first_name', 'password'] 

    def clean(self): 
     cleaned_data = super(RegistrationForm, self).clean() 
     password = cleaned_data.get("password") 
     confirm_password = cleaned_data.get("confirm_password") 
     if password != confirm_password: 
      raise forms.ValidationError("Passwords are not same") 
     return cleaned_data 

あなたはそれが唯一のUserのフィールドが含まれて見ることができるように。

追加のフォームとビューを適切に実装するにはどうすればよいですか?

答えて

関連する問題