2014-07-10 44 views
5

Szablon Django zgłasza "AttributeError" podczas renderowania. Chcę osiągnąć to, że w szablonie rezolutka wersja będzie zawierać pole wyboru z wartościami od poniższa lista.Błąd Django: "Obiekt" ChoiceField "nie ma atrybutu" is_hidden ""

Oto plik Forms.py:

class CallForm (forms.ModelForm): 

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

Objaśnienie:

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

Tu jest błąd Django:

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' 

Co Cosing że 'AttributeError'? Jak można to naprawić? Dzięki.

Odpowiedz

10

ChoiceField nie jest widget - to form field:

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

    class Meta: 
     model = Call 
     fields = ['employee_id'] 
+0

Jaki jest właściwy sposób to zrobić? Jak mogę przenieść go do widgetu? – user2216190

+0

@ user2216190 właściwa droga jest wewnątrz odpowiedzi :) – alecxe

+0

możesz wyjaśnić w skrócie, co jest celem widgetów? – user2216190

Powiązane problemy