2017-11-13 26 views
1

私は、選択肢の動的リストをModelFormにバインドしようとしています。フォームが正しく表示されます。しかし、POSTリクエストでフォームを使用すると、空のフォームが戻ってきます。私の目標は、そのフォームをデータベースに保存することです(form.save())。どんな助けでも大歓迎です。DjangoのModelFormに動的な選択肢をバインドする

私は複数の選択肢の選択フィールドを使用してい

モデル(https://github.com/goinnn/django-multiselectfield

from django.db import models 
from multiselectfield import MultiSelectField 

class VizInfoModel(models.Model): 

    tog = MultiSelectField() 
    vis = MultiSelectField() 

フォーム

class VizInfoForm(forms.ModelForm): 

    class Meta: 
     model = VizInfoModel 
     fields = '__all__' 

    def __init__(self,choice,*args,**kwargs): 
     super(VizInfoForm, self).__init__(*args,**kwargs) 
     self.fields['tog'].choices = choice 
     self.fields['vis'].choices = choice 

ビュー

フォームをインスタンス化するときに、ビューから選択肢が渡されます。

def viz_details(request): 

    options = [] 
    headers = request.session['headers'] 
    for header in headers : 
     options.append((header, header)) 

    if request.method == 'POST': 
     form = VizInfoForm(options, request.POST) 
     #doesnt' get into the if statement since form is empty! 
     #choices are not bounded to the model although the form is perfectly rendered   
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/upload') 
    else: 
     #this works just fine 
     form = VizInfoForm(options) 
     return render(request, 'uploads/details.html', {'form': form}) 

テンプレート

<form method="post" enctype="multipart/form-data"> 
     {% csrf_token %} 

     <p>Choose variables to toggle between</p> 
     {{ form.tog }} 

     <br></br> 
     <p>Choose variable to be visualized</p> 
     {{ form.vis }} 

     <br></br> 

     <button type="submit">Submit</button> 
    </form> 

答えて

0

あなたはDjangoがあなたのif request.method == 'POST'ブロックに入らない言っています。

これは、POSTメソッドでリクエストを送信していないことを示しています。あなたのテンプレートにおそらくエラーがあります。formでメソッドを指定していないか、またはボタンを送信の代わりにリンクにすることができますか?

あなたの質問を解決するのに十分でない限り、もっと言えるようにテンプレートを表示してください。

+0

if request.method == 'POST'ブロックに入ります。そのコンテンツを印刷すると、すべてがうまく見えます。 VizInfoForm(options、request.POST)のようにフォームをインスタンス化するときに問題が発生します。ここでは、if文を検証しない空のフォームを取得します。 – reiriz

関連する問題