2017-01-15 6 views
0

CheckboxSelectMultipleウィジェットで作成しようとしましたが、レンダリングが失敗します。Django:定位置引数としてフォームの `__init __()`にChoiceFieldの選択肢を渡します。AttributeError

例外タイプ:AttributeError例外値: 'list'オブジェクトには、 'get'属性の がありません。

あなたは以下を見て、私が間違っているの何:(事前にあなたの助けを

感謝をするといくつかの光を投げてもらえ

forms.py:。

class TestSubmitForm(forms.Form): 
    tests = forms.ChoiceField() 

    def __init__(self,*args,**kwargs): 
     self.testList = args[0] 
     super(TestSubmitForm,self).__init__(*args,**kwargs) 
     self.fields['tests'].widget = forms.CheckboxSelectMultiple() 
     self.fields['tests'].choices = self.testList 

views.py

def index(request): 
    tc_obj_form = [("","1"),("","2"),("",3")] 
    tests = TestSubmitForm(tc_obj_form) 
    return render(request, 'index.html',{'tests':tests}) 

index.ht mlの

<form action="." method="POST"> 
    <table > 
     {% csrf_token %} 
     {{ tests }} 
    </table> 
    <input type="submit" value="Submit"/> 
</form> 

スタックトレース:

Traceback: File "/local/User/demo/web/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/local/User/demo/web/apps/Lcloud/views.py" in index 
    94.   return render(request, 'Lcloud/index.html', 
    ... 
    135.   return self.as_table() File "/local/User/demo/web/venv/lib/python2.7/site-packages/django/forms/forms.py" in as_table 
    257.    errors_on_separate_row=False) File "/local/User/demo/web/venv/lib/python2.7/site-packages/django/forms/forms.py" in _html_output 
    181.   top_errors = self.non_field_errors() # Errors that should be displayed above all fields. File "/local/User/demo/web/venv/lib/python2.7/site-packages/django/forms/forms.py" in non_field_errors 
    283.   return self.errors.get(NON_FIELD_ERRORS, self.error_class()) File "/local/User/demo/web/venv/lib/python2.7/site-packages/django/forms/forms.py" in errors 
    154.    self.full_clean() File "/local/User/demo/web/venv/lib/python2.7/site-packages/django/forms/forms.py" in full_clean 
    353.   self._clean_fields() File "/local/User/demo/web/venv/lib/python2.7/site-packages/django/forms/forms.py" in _clean_fields 
    362.    value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name)) File "/local/User/demo/web/venv/lib/python2.7/site-packages/django/forms/widgets.py" in value_from_datadict 
    585.   return data.get(name, None) 

Exception Type: AttributeError at /Lcloud/ Exception Value: 'list' object has no attribute 'get' 

答えて

0
次のようにフォームの __init__()を変更

def __init__(self, testList, args,**kwargs): 
    self.testList = testList 
    super(TestSubmitForm,self).__init__(*args,**kwargs) # testList not in args! 
    # ... 

問題は(あなたがsuper(...)経由で呼び出す)forms.Form__init__()dictを期待していることです - 最初の位置引数としてのオブジェクトのようなものです。通常は、またはsthのようなQueryDictのインスタンスになります。類似。

+0

ご回答いただきありがとうございます:) – user3359184

関連する問題