5

DjangoにはUser(Djangoで事前定義)とUserProfileという2つのモデルがあります。 2つは外​​部キーを介して接続されています。DjangoでUserとUserProfileオブジェクトを保存するビューを作成する方法

models.py:私はUserCreationFormを使用してい

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True, related_name="connect") 
    location = models.CharField(max_length=20, blank=True, null=True) 

は、ユーザーモデルのために(ジャンゴによって事前に定義された)、およびforms.py

#UserCreationForm for User Model 

class UserProfileForm(ModelForm): 
    class Meta: 
    model = UserProfile 
    exclude = ("user",) 

IでのUserProfileのために別のフォームを作成これら2つのフォームを両方ともテンプレートregistration.htmlにロードすると、ウェブサイトの顧客は両方のモデルに含まれるフィールドに関するデータを入力できます(Userモデルの "first_name"、 "last_name"、UserProfileモデルの "location")。

私の人生にとって、私はこの登録フォームのビューを作成する方法を理解できません。これまでに試したことは、Userオブジェクトを作成しますが、対応するUserProfileオブジェクトの場所などの他の情報を関連付けません。誰か助けてくれますか?これは私が現在持っているものである:ほとんどそこ

def register(request): 
    if request.method == 'POST': 
    form1 = UserCreationForm(request.POST) 
    form2 = UserProfileForm(request.POST) 
    if form1.is_valid(): 
     #create initial entry for User object 
     username = form1.cleaned_data["username"] 
     password = form1.cleaned_data["password"] 
     new_user = User.objects.create_user(username, password) 

     # What to do here to save "location" field in a UserProfile 
     # object that corresponds with the new_user User object that 
     # we just created in the previous lines 

    else: 
    form1 = UserCreationForm() 
    form2 = UserProfileForm() 
    c = { 
    'form1':UserCreationForm, 
    'form2':form2, 
    } 
    c.update(csrf(request)) 
    return render_to_response("registration/register.html", c) 
+0

http://stackoverflow.com/questions/569468/django-multiple-models-in-one-template-using-forms –

答えて

3

:)

def register(request): 
    if request.method == 'POST': 
     form1 = UserCreationForm(request.POST) 
     form2 = UserProfileForm(request.POST) 
     if form1.is_valid() and form2.is_valid(): 
      user = form1.save() # save user to db 
      userprofile = form2.save(commit=False) # create profile but don't save to db 
      userprofile.user = user 
      userprofile.location = get_the_location_somehow() 
      userprofile.save() # save profile to db 

    else: 
     form1 = UserCreationForm() 
     form2 = UserProfileForm() 
    c = { 
     'form1':form1, 
     'form2':form2, 
    } 
    c.update(csrf(request)) 
    return render_to_response("registration/register.html", c) 

ビットを明確にするために、form.save()はモデルのインスタンスを作成し、DBに保存します。 form.save(commit=False)インスタンスを作成するだけですが、dbには何も保存されません。

関連する問題