2013-01-01 107 views
3

每當我決定列出一個布爾場我list_display如「主動」(見例)Django的:KeyError異常在管理上列出布爾字段

class CompanyAdmin(admin.ModelAdmin): 
    fields = ['name', 'created'] 
    list_display = ['name', 'active', 'created'] 

我得到以下錯誤...

KeyError at /admin/web/company/ 

'\x01' 

這發生在我嘗試列出的任何布爾值上。我使用grappelli作爲管理員皮膚。我已經包含了下面的完整錯誤和我的模型。

型號:

class Company(models.Model): 
    companyid = models.CharField(max_length=255, primary_key=True, db_column='companyID') 
    name = models.CharField(max_length=105) 
    active = models.BooleanField(default=False) 
    created = models.DateTimeField() 
    modified = models.DateTimeField(null=True, blank=True) 
    class Meta: 
     db_table = u'company' 

錯誤: 環境:

Request Method: GET 
Request URL: http://127.0.0.1:8000/admin/web/company/ 

Django Version: 1.4.2 
Python Version: 2.7.2 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.flatpages', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'grappelli.dashboard', 
'grappelli', 
'django.contrib.admin', 
'django.contrib.admindocs', 
'web') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Template error: 
In template /Users/user/Documents/workspace/Ares/grappelli/templates/admin/change_list.html, error at line 222 

    212 :      {% blocktrans count cl.formset.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %} 


    213 :     </p> 


    214 :     {{ cl.formset.non_form_errors }} 


    215 :    {% endif %} 


    216 :    <!-- MANAGEMENT FORM --> 


    217 :    {% if cl.formset %} 


    218 :     {{ cl.formset.management_form }} 


    219 :    {% endif %} 


    220 :    <!-- CHANGELIST-RESULTS --> 


    221 :    {% block result_list %} 


    222 :     {% result_list cl %} 


    223 :    {% endblock %} 


    224 :   </section> 


    225 :   <!-- PAGINATION BOTTOM --> 


    226 :   {% if not cl.result_count == 0 %} 


    227 :    {% block pagination_bottom %} 


    228 :     <div class="grp-module"> 


    229 :      <div class="grp-row">{% pagination cl %}</div> 


    230 :     </div> 


    231 :    {% endblock %} 


    232 :   {% endif %} 


Traceback: 
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response 
    136.      response = response.render() 
File "/Library/Python/2.7/site-packages/django/template/response.py" in render 
    104.    self._set_content(self.rendered_content) 
File "/Library/Python/2.7/site-packages/django/template/response.py" in rendered_content 
    81.   content = template.render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    140.    return self._render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in _render 
    134.   return self.nodelist.render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    823.     bit = self.render_node(node, context) 
File "/Library/Python/2.7/site-packages/django/template/debug.py" in render_node 
    74.    return node.render(context) 
File "/Library/Python/2.7/site-packages/django/template/loader_tags.py" in render 
    123.   return compiled_parent._render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in _render 
    134.   return self.nodelist.render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    823.     bit = self.render_node(node, context) 
File "/Library/Python/2.7/site-packages/django/template/debug.py" in render_node 
    74.    return node.render(context) 
File "/Library/Python/2.7/site-packages/django/template/loader_tags.py" in render 
    123.   return compiled_parent._render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in _render 
    134.   return self.nodelist.render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    823.     bit = self.render_node(node, context) 
File "/Library/Python/2.7/site-packages/django/template/debug.py" in render_node 
    74.    return node.render(context) 
File "/Library/Python/2.7/site-packages/django/template/loader_tags.py" in render 
    62.    result = block.nodelist.render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    823.     bit = self.render_node(node, context) 
File "/Library/Python/2.7/site-packages/django/template/debug.py" in render_node 
    74.    return node.render(context) 
File "/Library/Python/2.7/site-packages/django/template/loader_tags.py" in render 
    62.    result = block.nodelist.render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    823.     bit = self.render_node(node, context) 
File "/Library/Python/2.7/site-packages/django/template/debug.py" in render_node 
    74.    return node.render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    1178.      _dict = func(*resolved_args, **resolved_kwargs) 
File "/Library/Python/2.7/site-packages/django/contrib/admin/templatetags/admin_list.py" in result_list 
    278.    'results': list(results(cl))} 
File "/Library/Python/2.7/site-packages/django/contrib/admin/templatetags/admin_list.py" in results 
    256.    yield ResultList(None, items_for_result(cl, res, None)) 
File "/Library/Python/2.7/site-packages/django/contrib/admin/templatetags/admin_list.py" in __init__ 
    248.   super(ResultList, self).__init__(*items) 
File "/Library/Python/2.7/site-packages/django/contrib/admin/templatetags/admin_list.py" in items_for_result 
    204.      result_repr = display_for_field(value, f) 
File "/Library/Python/2.7/site-packages/django/contrib/admin/util.py" in display_for_field 
    321.   return _boolean_icon(value) 
File "/Library/Python/2.7/site-packages/django/contrib/admin/templatetags/admin_list.py" in _boolean_icon 
    164.      {True: 'yes', False: 'no', None: 'unknown'}[field_val]) 

Exception Type: KeyError at /admin/web/company/ 
Exception Value: '\x01' 
+0

我認爲問題是你指定'fields = ['name','created']'顯示,但在'list_displa如果你正在添加一個沒有包含在'fields'中的字段'active',將你的'fields'改爲'fields = ['name','created','active']',看看會發生什麼。 (不確定) –

+1

您是否正在訪問您反向設計的現有MySQL數據庫? – dgel

+0

@dgel是的,這正是我正在做的,模型生成了,爲什麼? – Prometheus

回答

4

我遇到類似的問題,使用了模型從休眠現有的MySQL數據庫在一些Django模型。它使用BIT(1)作爲布爾類型。只要你的1個0值顯示爲在Python \x01\x00你應該能夠挽救以下BooleanField

這裏的一些線索:

class MyBooleanField(models.BooleanField): 

    __metaclass__ = models.SubfieldBase 

    def get_internal_type(self): 
     return "MyBooleanField" 

    def db_type(self): 
     return 'bit(1)' 

    def to_python(self, value): 
     if value in (True, False): return value 
     if value in ('t', 'True', '1', '\x01'): return True 
     if value in ('f', 'False', '0', '\x00'): return False 

    def get_db_prep_value(self, value): 
     return 0x01 if value else 0x00 

從:在你的模型http://djangosnippets.org/snippets/1869/

然後:

class Company(models.Model): 
    active = models.MyBooleanField(default=False) 
+0

是的我的模型是從JAVA Hibernate完成的。謝謝。 – Prometheus