2016-07-05 4 views
0

私の新しいプロジェクトの最前列に2つのDjangoモデルを変更するフォームがあります。実際には、ユーザーは自分のメールアドレス、名前、個人的な目標とその目標の締め切りを入力する必要があります。 「電子メール」と「名前」はモデル「ユーザー」に属し、他の2つはモデル「目標」に属します。同じフォームで保存された2つのdjangoモデルを関連付ける方法

私はGoalにユーザーに属する関係(ForeignKey)を与えようとしていますが、私はそれを行うことができません。私はすでに存在するユーザーがいる場合、それを行う方法を知っていますが、私の状況では、ユーザーと目標(彼に属する)は同時に作成されます。

マイビューは次のようになります。

from django.shortcuts import render 
from .models import Goal, User 
from .forms import GoalForm, UserForm 


def front_site(request): 
    if request.method == "POST": 
     goal_form = GoalForm(request.POST) 
     user_form = UserForm(request.POST) 
     if all([goal_form.is_valid(), user_form.is_valid()]): 
      user_form.save() 
      goal_form.save() 
      return render(request, 'goalapp/single_goal.html', {'user_form': user_form, 'goal_form': goal_form}) 
     else: 
      user_form = UserForm(request.POST) 
      goal_form = GoalForm(request.POST) 
      return render(request, 'goalapp/front_site.html', {'user_form': user_form, 'goal_form': goal_form}) 
    else: 
     goal_form = GoalForm() 
     user_form = UserForm() 
     return render(request, 'goalapp/front_site.html', {'user_form': user_form, 'goal_form': goal_form}) 

私のモデルは次のようになります。ForeignKeyのが設定されるように

from django.db import models 
from django.utils import timezone 

class User(models.Model): 
    user = models.CharField(max_length=50) 
    user_email = models.EmailField() 

    def __str__(self): 
     return self.user 

class Goal(models.Model): 
    user = models.ForeignKey('goalapp.User', related_name='goal', on_delete=models.CASCADE, null=True) 
    goal_body = models.CharField(max_length= 100) 
    goal_deadline = models.DateTimeField(default=timezone.now) 
    goal_status = models.IntegerField(default = 1) 

    def __str__(self): 
     return self.goal_body 

は、どのように私は仕事にこれを得るのですか?

答えて

2

に割り当てます。

user = user_form.save() 
goal = goal_form.save(commit=False) 
goal.user = user 
goal.save() 
+0

ああ、それはコミット= falseです。ありがとうございました! –

0

だけで保存されたときに、ユーザーIDを取得し、あなたがFalse =コミットして、フォームを保存することで、目標のインスタンスを取得することができますゴール

user = user_form.save() 
goal.user = user 
goal_form.save() 
+0

ありがとうございました! これは私に「目標は定義されていません」という名前のエラーを表示しますか? "ゴール"はモデルゴールに取り組んでいると思いますか?それを大文字で入力するとエラーは出ませんが、djangosのadminpanelではそれでも設定された外部キーは表示されません。 –

関連する問題