2017-12-15 3 views
0

登録/ログイン操作を含むwebappを作成しようとしています。ログインはうまくいっていますが、登録フォームはイライラしています。django - 登録フォーム情報をユーザープロフィールモデルにリンクする

私はUserCreationFormを継承するクラス登録フォームを持っています。ユーザーは作成時に管理ページに作成され表示されますが、問題は管理ページのUserProfileモデルで表示されません。それは情報をリンクするものではなく、リンクする方法を見つけることができませんでした。ここで

は、登録フォームである:ここで

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm 

    class RegistrationForm(UserCreationForm): 
     email = forms.EmailField(required=True) 
     city = forms.CharField(required=False) 
     country = forms.CharField(required=True) 
     first_name = forms.CharField(required=True) 
     last_name = forms.CharField(required=True) 
     username = forms.CharField(required=True) 

     class Meta: 
      model = User 
      fields = (
       'username', 
       'first_name', 
       'last_name', 
       'country', 
       'city', 
       'email' 
      ) 

      def save(self, commit=True): 
       user = super(RegistrationForm, self).save(commit=False) 
       #user.first_name = self.cleaned_data['first_name'] 

       if commit: 
        user.save() 

       return user 

は私のモデルは以下のとおりです。

class UserProfile(models.Model): 
    user = models.OneToOneField(User, 
           on_delete=models.CASCADE 
           ) 
    username = models.TextField(max_length=30, default="") 
    first_name = models.TextField(max_length=30, default="") 
    last_name = models.TextField(max_length=30, default="") 
    country = models.TextField(max_length=30, default="Which country are you from?") 
    city = models.TextField(max_length=30, default="Which city are you from?") 


class ColorChoice(models.Model): 
    user = models.ForeignKey(
          'UserProfile', 
          on_delete=models.CASCADE 
          ) 
    color1 = models.IntegerField() 
    color2 = models.IntegerField() 
    color3 = models.IntegerField() 
    color4 = models.IntegerField() 
    color5 = models.IntegerField() 

と登録を行い、私のview.py:

def register(request): 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('color') 
    else: 
     form = RegistrationForm() 

     args = {'form': form} 
     return render(request, 'account/create_new.html', args) 
+0

私は 'UserProfile'モデルを参照してくださいいけません。 'UserModel' =' UserProfile'ですか?そうであれば、ユーザーの作成時にオブジェクトを保存しません。 –

+0

@SachinKukreja申し訳ありませんが、私はUserModelモデルを意味しています。 –

答えて

1

あなたformのみですUserの新しいオブジェクトを作成します。たとえば、の新しいオブジェクトを作成するには、signalを追加する必要があります。このような

何か:

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     Profile.objects.create(user=instance) 
signals.post_save.connect(create_user_profile, sender=User) 
+0

ありがとうございました! –

関連する問題