2012-01-11 29 views
0

私は、ModelFormとFormsを使用してデータベース内のデータを保存する方法の鍵となる基本が欠落していると思います。私はUserクラスには含まれていない店舗固有のデータであるのUserProfileのモデルを持っているModelFormを使用してユーザー入力フォームからデータを保存する方法

Models.py:

class UserProfileForm(ModelForm): 
    class Meta: 
     model = UserProfile 

class UserProfile(models.Model): 
    GRADE_YEAR_CHOICES = (
     ('FR', 'Freshman'), 
     ('SO', 'Sophomore'), 
     ('JR', 'Junior'), 
     ('SR', 'Senior'), 
     ('GR', 'Graduate') 
    ) 

    school = models.CharField(max_length=64) 
    grade_year = models.CharField(max_length=2, choices=GRADE_YEAR_CHOICES) 
    gpa = models.DecimalField(decimal_places=2, max_digits=6, blank=True, null=True) 
    user = models.ForeignKey(User, unique=True) 

マイForms.pyは次のようになります

この表示は次のようになります。

def more(request): 
    if request.method == 'POST': 
     form = UserProfileForm(request.POST) 
     if form.is_valid(): 
      form = UserProfileForm(request.POST, 
       school = form.cleaned_data['school'], 
       grade_year = form.cleaned_data['grade_year'], 
       gpa = form.cleaned_data['gpa'], 
       user = form.cleaned_data['user'] 
      ) 
      form.save() 
      return HttpResponseRedirect('/success') 
    else: 
     form = UserProfileForm() 

     variables = RequestContext(request, { 
      'form': form 
     }) 
     return render_to_response('more.html', variables) 

私は取得データを保存しようとすると、フォームが、私は指定されたモデルからすべてのフィールドを正しくレンダリングしかし:

__init__() got an unexpected keyword argument 'grade_year' 

は、私がここで何をしないのですか?私は大きなコンセプトを見逃している可能性があるので、どんな助けでも大歓迎です。

答えて

1

期待していないモデルフィールドを参照するキーワード引数をUserProfileFormに渡しています。

フォームがインスタンス化された後にsave()に電話するか、cleaned_data(フォームが有効)の場合、POSTedフィールドはすでにModelFormのマジックを使用してインスタンスにマップされています。

if form.is_valid(): 
      form.save() 
+0

これはそれです。うわー、私はそれがそれほど簡単ではないことを理解していませんでした。どうもありがとうございます –

関連する問題