强制为Unicode:需要string或缓冲区,在django admin中进行渲染时findNoneType

我有这个错误很长一段时间,但无法弄清楚:

在呈现时捕获TypeError:强制为Unicode:需要string或缓冲区,findNoneType

这发生在pipe理员,当我尝试添加或修改我的一个模型(显示工作正常)

这是模型:

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') 

任何想法我在这里做错了什么?

追溯:

  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 

当你有一个__unicode__方法返回一个没有input的字段时,会发生这个错误。 任何空白字段是None ,Python不能转换None ,所以你得到的错误。

在你的情况下,最可能的问题是PCE模型的__unicode__方法,特别是返回的字段。

你可以通过返回一个默认值来防止这个:

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

当您在__unicode__方法中返回对象而不是string时,可能会发生此错误。 例如:

 class Author(models.Model): . . . name = models.CharField(...) class Book(models.Model): . . . author = models.ForeignKey(Author, ...) . . . def __unicode__(self): return self.author # <<<<<<<< this causes problems 

为了避免这个错误,您可以将作者实例转换为unicode:

 class Book(models.Model): . . . def __unicode__(self): return unicode(self.author) # <<<<<<<< this is OK 

在我的情况下,这是另一回事:在我可以设置任何types的关系之前,我保存的对象应该先有一个id(例如save()应该被调用)。

返回值def __unicode __应该与相关模型(表)的返回值类似,以正确查看djangopipe理面板中的“some_field”。 你也可以使用:

 def __str__(self): return self.some_field 

首先,检查你通过unicode返回的是一个string。

如果它不是一个string,你可以把它改成这样的string(其中self.id是一个整数)

 def __unicode__(self): return '%s' % self.id 

之后,如果仍然不起作用,请重新启动./manage.py shell以使更改生效并再次尝试。 它应该工作。

最好的祝福