2017-08-14 10 views
0

これまでさまざまなオプションを試しましたが、これまでのところ運がありませんでした。インスタンスデータをModelFieldにあらかじめ入力するようにしています。ここで私が持っているものです。オブジェクトデータを含む事前入力モデルフォーム - Django

forms.py

class edit_project_info(ModelForm): 
    project_name = forms.CharField(max_length=150) 


class Meta: 
    model = Project 
    exclude = ['project_type', 'created_date', 'start_date', 'end_date', 'pm_scope', 'dev_scope', 'design_scope', 'testing_scope' ] 

View.py

def edit_project (request, offset): 
    this_project = Project.objects.get(pk=offset) 
    data = {'project_name' : 'abc'} 
    if request.method == 'POST': 
     form = edit_project_info(request.POST, instance=this_project, initial=data) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/project_profile/%s/' % offset) 
    else: 
     form = edit_project_info() 

私が得るすべては空のフィールドです。初期値をforms.pyに追加することはできますが、フォームインスタンスに基づいて作成されるのではなく、静的です。私がdictを作成してフォームのインスタンスのinitialに渡したのは、何もしていないようです。私は何か基本的なものが欠けていると確信している。どんな助けも素晴らしいだろう!早めにありがとう。

答えて

0

最後の2行は、form変数を再作成します。私は最後の行に「フォーム= edit_project_info(初期=データ)」に変更。これは、「ローカル変数 'フォームの割り当ての前に参照さ」が、あなたの提案に基づいて、私にエラーを与える

def edit_project (request, offset): 
    this_project = Project.objects.get(pk=offset) 
    data = {'project_name' : 'abc'} 
    form = edit_project_info(request.POST, instance=this_project, initial=data) 
    if request.method == 'POST': 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/project_profile/%s/' % offset) 
    # else: 
    #  form = edit_project_info() 
    # ... 
+0

を、それがのように動作します:ちょうどelse: form = edit_project_info()を削除今期待している。理由を理解するために少しの調査を行う必要があります。助けてくれてありがとう。 – jonin

+0

ああ、申し訳ありませんがインデントを理解していませんでした。私は答えを更新しました - 'form'は' if 'の前に '' request.method ==' POST ': ''でなければなりません。 –

+0

アントンにありがとう!これは期待通りに機能しました。 – jonin

関連する問題