Django error: "'ChoiceField' object has no attribute 'is_hidden'"

17,408

ChoiceField is not a widget - it is a form field:

class CallForm (forms.ModelForm):
    employee_id = forms.ChoiceField(choices=FormsTools.EmployeesToTuples(Employee.objects.all()))

    class Meta:
        model = Call
        fields = ['employee_id']
Share:
17,408
user2216190
Author by

user2216190

Updated on July 14, 2022

Comments

  • user2216190
    user2216190 almost 2 years

    Django template throws 'AttributeError' when rendering..What I want to achive is that in the template the resolted forn will contain a select box with the values from the list below.

    Here's the Forms.py file:

    class CallForm (forms.ModelForm):
    
    class Meta():
        model = Call
        widgets = {
             'employee_id' : forms.ChoiceField(choices=FormsTools.EmployeesToTuples(Employee.objects.all()))
        }
    

    Explanation:

    FormsTools.EmployeesToTuples(Employee.objects.all()) --> [(1, u'E1'), (2, u'E2'), (3, u'E3')]
    

    Here is django's error:

    Template error:
    In template C:\virtualenv\#\#\templates\new_call.html, error at line 7
       'ChoiceField' object has no attribute 'is_hidden'
       1 : {% extends "base.html" %}
    
    
       2 : 
    
    
       3 : {% block content %}
    
    
       4 : 
    
    
       5 :         <form action="/NewCall/" method="post">{% csrf_token %}
    
    
       6 :             <ul>
    
    
       7 :                  {{ form.as_p }} 
    
    
       8 :             </ul>
    
    
       9 :             <input type="submit" name="submit" value="Add New Call">
    
    
       10 : 
    
    
       11 :         </form>
    
    
       12 : 
    
    
       13 : {% endblock %}
    
    Traceback:
    File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
      112.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "C:\virtualenv\OmegaManager2\OmegaManager\ServiceManager\views.py" in new_call
      32.         html = t.render(Context(args))
    File "C:\Python27\lib\site-packages\django\template\base.py" in render
      140.             return self._render(context)
    File "C:\Python27\lib\site-packages\django\template\base.py" in _render
      134.         return self.nodelist.render(context)
    File "C:\Python27\lib\site-packages\django\template\base.py" in render
      840.                 bit = self.render_node(node, context)
    File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
      78.             return node.render(context)
    File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
      123.         return compiled_parent._render(context)
    File "C:\Python27\lib\site-packages\django\template\base.py" in _render
      134.         return self.nodelist.render(context)
    File "C:\Python27\lib\site-packages\django\template\base.py" in render
      840.                 bit = self.render_node(node, context)
    File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
      78.             return node.render(context)
    File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
      62.             result = block.nodelist.render(context)
    File "C:\Python27\lib\site-packages\django\template\base.py" in render
      840.                 bit = self.render_node(node, context)
    File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
      78.             return node.render(context)
    File "C:\Python27\lib\site-packages\django\template\debug.py" in render
      88.             output = self.filter_expression.resolve(context)
    File "C:\Python27\lib\site-packages\django\template\base.py" in resolve
      585.                 obj = self.var.resolve(context)
    File "C:\Python27\lib\site-packages\django\template\base.py" in resolve
      735.             value = self._resolve_lookup(context)
    File "C:\Python27\lib\site-packages\django\template\base.py" in _resolve_lookup
      789.                             current = current()
    File "C:\Python27\lib\site-packages\django\forms\forms.py" in as_p
      241.             errors_on_separate_row = True)
    File "C:\Python27\lib\site-packages\django\forms\forms.py" in _html_output
      156.             if bf.is_hidden:
    File "C:\Python27\lib\site-packages\django\forms\forms.py" in is_hidden
      560.         return self.field.widget.is_hidden
    
    Exception Type: AttributeError at /NewCall/
    Exception Value: 'ChoiceField' object has no attribute 'is_hidden'
    

    What's cosing that 'AttributeError' ? How can it be fixed? Thanks.

  • user2216190
    user2216190 almost 10 years
    What is the right way to do it? How can I transfer it to widget?
  • user2216190
    user2216190 almost 10 years
    can you explain in short what the purpose of widgets then?
  • alecxe
    alecxe almost 10 years
    @user2216190 glad it worked. Basically widgets control representation of the field on the web page, widgets deal with rendering of the HTML form, docs are pretty detailed about them.