强制转换为 Unicode:需要字符串或缓冲区,在 django admin 中渲染时发现 NoneType

coercing to Unicode: need string or buffer, NoneType found when rendering in django admin(强制转换为 Unicode:需要字符串或缓冲区,在 django admin 中渲染时发现 NoneType)
本文介绍了强制转换为 Unicode:需要字符串或缓冲区,在 django admin 中渲染时发现 NoneType的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I have this error since a long time but can't figure it out :

Caught TypeError while rendering: coercing to Unicode: need string or buffer, NoneType found

It happens in admin when I try to add or modify on one of my models (display works fine)

This is the model:

class PS(models.Model):
    id_ps = models.IntegerField(null=True)
    client = models.ForeignKey(Client, null=True, blank=True)
    nom_du_site = models.CharField(max_length=250)
    rue_livraison = models.TextField(null=True)
    complement_adresse = models.TextField(null=True)
    code_postal_livraison = models.CharField(max_length=50, null=True)
    ville_livraison = models.CharField(max_length=200, null=True)
    pays_livraison = models.CharField(max_length=200, null=True)
    distributeur = models.CharField(max_length=50, null=True)
    tarif = models.CharField(max_length=250, null=True)
    type_tarif = models.CharField(max_length=50, null=True)
    type_installation = models.CharField(max_length=50, null=True)

    def __unicode__(self):
        return self.nom_du_site

    @property
    def pce(self):        
        try:
            return PCE.objects.filter(ps=self)[0]
        except IndexError:
            return
    #    
    def get_pce(self):
        from pce.models import PCE
        return PCE.objects.filter(ps=self).exclude(frequence='6M')
    #
    def get_pce_6m(self):
        from pce.models import PCE
        return PCE.objects.filter(ps=self,frequence='6M') 

Any idea what am i doing wrong here?

Traceback:

    Environment:

    Request Method: GET
    Request URL: http://127.0.0.1:8026/admin/ps/ps/add/
    Django Version: 1.2.5
    Python Version: 2.7.2
    Installed Applications:
    ['django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sites',
     'django.contrib.messages',
     'django.contrib.admin',
     'easy_thumbnails',
     'django_extensions',
     'contentadmin',
     'south',
     'sentry',
     'sentry.client',
     'indexer',
     'file_uploader',
     'paging',
     'pagination',
     'consommation',
     'ps',
     'pce',
     'profil',
     'analytics',
     'document']
    Installed Middleware:
    ('annoying.middlewares.StaticServe',
     'django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'pagination.middleware.PaginationMiddleware')


    Template error:
    In template /usr/local/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/includes/fieldset.html, error at line 19
       Caught TypeError while rendering: coercing to Unicode: need string or buffer, NoneType found
       9 :             {% for field in line %}


       10 :                 <div{% if not line.fields|length_is:'1' %} class="field-box{% if not field.is_readonly and field.errors %} errors{% endif %}"{% endif %}>


       11 :                     {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}


       12 :                     {% if field.is_checkbox %}


       13 :                         {{ field.field }}{{ field.label_tag }}


       14 :                     {% else %}


       15 :                         {{ field.label_tag }}


       16 :                         {% if field.is_readonly %}


       17 :                             <p>{{ field.contents }}</p>


       18 :                         {% else %}


       19 :                              {{ field.field }} 


       20 :                         {% endif %}


       21 :                     {% endif %}


       22 :                     {% if field.field.field.help_text %}


       23 :                         <p class="help">{{ field.field.field.help_text|safe }}</p>


       24 :                     {% endif %}


       25 :                 </div>


       26 :             {% endfor %}


       27 :         </div>


       28 :     {% endfor %}


       29 : </fieldset>


    Traceback:
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
      100.                     response = callback(request, *callback_args, **callback_kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper
      288.                 return self.admin_site.admin_view(view)(*args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
      76.                     response = view_func(request, *args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
      78.         response = view_func(request, *args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner
      190.             return view(request, *args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
      21.             return decorator(bound_func)(*args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
      76.                     response = view_func(request, *args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
      17.                 return func(self, *args2, **kwargs2)
    File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py" in _commit_on_success
      299.                     res = func(*args, **kw)
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in add_view
      909.         return self.render_change_form(request, context, form_url=form_url, add=True)
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in render_change_form
      692.         ], context, context_instance=context_instance)
    File "/usr/local/lib/python2.7/dist-packages/django/shortcuts/__init__.py" in render_to_response
      20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py" in render_to_string
      186.     return t.render(context_instance)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      173.             return self._render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in _render
      167.         return self.nodelist.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      796.                 bits.append(self.render_node(node, context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
      72.             result = node.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py" in render
      125.         return compiled_parent._render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in _render
      167.         return self.nodelist.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      796.                 bits.append(self.render_node(node, context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
      72.             result = node.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py" in render
      125.         return compiled_parent._render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in _render
      167.         return self.nodelist.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      796.                 bits.append(self.render_node(node, context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
      72.             result = node.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py" in render
      62.             result = block.nodelist.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      796.                 bits.append(self.render_node(node, context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
      72.             result = node.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
      174.                 nodelist.append(node.render(context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py" in render
      139.             return self.template.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      173.             return self._render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in _render
      167.         return self.nodelist.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      796.                 bits.append(self.render_node(node, context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
      72.             result = node.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
      174.                 nodelist.append(node.render(context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
      174.                 nodelist.append(node.render(context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
      260.             return self.nodelist_false.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      796.                 bits.append(self.render_node(node, context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
      72.             result = node.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py" in render
      260.             return self.nodelist_false.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/__init__.py" in render
      796.                 bits.append(self.render_node(node, context))
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
      72.             result = node.render(context)
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render
      91.             output = force_unicode(output)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py" in force_unicode
      66.                 s = unicode(s)
    File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in __unicode__
      408.         return self.as_widget()
    File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in as_widget
      450.         return widget.render(name, data, attrs=attrs)
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/widgets.py" in render
      247.         output = [self.widget.render(name, value, *args, **kwargs)]
    File "/usr/local/lib/python2.7/dist-packages/django/forms/widgets.py" in render
      447.         options = self.render_options(choices, [value])
    File "/usr/local/lib/python2.7/dist-packages/django/forms/widgets.py" in render_options
      464.         for option_value, option_label in chain(self.choices, choices):
    File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in __iter__
      898.                 yield self.choice(obj)
    File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in choice
      904.         return (self.field.prepare_value(obj), self.field.label_from_instance(obj))
    File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in label_from_instance
      955.         return smart_unicode(obj)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py" in smart_unicode
      39.     return force_unicode(s, encoding, strings_only, errors)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py" in force_unicode
      66.                 s = unicode(s)

    Exception Type: TemplateSyntaxError at /admin/ps/ps/add/
    Exception Value: Caught TypeError while rendering: coercing to Unicode: need string or buffer, NoneType found

解决方案

This error happens when you have a __unicode__ method that is a returning a field that is not entered. Any blank field is None and Python cannot convert None, so you get the error.

In your case, the problem most likely is with the PCE model's __unicode__ method, specifically the field its returning.

You can prevent this by returning a default value:

def __unicode__(self):
   return self.some_field or u'None'

这篇关于强制转换为 Unicode:需要字符串或缓冲区,在 django admin 中渲染时发现 NoneType的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)