J'ai cette erreur depuis longtemps mais je n'arrive pas à le comprendre:
Caught TypeError lors du rendu: contraindre à utiliser Unicode: chaîne requise ou mémoire tampon, NoneType trouvé
Cela se produit dans l'administrateur lorsque j'essaie d'ajouter ou de modifier un de mes modèles (l'affichage fonctionne bien)
Voici le modèle:
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')
Une idée de ce que je fais mal ici?
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
Cette erreur se produit lorsque vous utilisez une méthode __unicode__
qui renvoie un champ non entré. Tous les champs vides sont None
et Python ne peut pas convertir None
. Vous obtenez donc l'erreur.
Dans votre cas, le problème le plus probable est lié à la méthode __unicode__
du modèle PCE
, plus précisément au champ qu’elle renvoie.
Vous pouvez empêcher cela en renvoyant une valeur par défaut:
def __unicode__(self):
return unicode(self.some_field) or u''
Cette erreur peut se produire lorsque vous retournez un objet au lieu d'une chaîne dans votre méthode __unicode__
. Par exemple:
class Author(models.Model):
. . .
name = models.CharField(...)
class Book(models.Model):
. . .
author = models.ForeignKey(Author, ...)
. . .
def __unicode__(self):
return self.author # <<<<<<<< this causes problems
Pour éviter cette erreur, vous pouvez convertir l'instance d'auteur en unicode:
class Book(models.Model):
. . .
def __unicode__(self):
return unicode(self.author) # <<<<<<<< this is OK
Dans mon cas, c’était quelque chose d’autre: l’objet que je sauvegardais devait d’abord avoir un identifiant (par exemple, save () devrait être appelé) avant que je puisse définir un type de relation avec lui.
Remplacez la fonction précédente par celle fournie. La solution la plus simple est:
def __unicode__(self):
return unicode(self.nom_du_site)
La valeur de retour def __unicode __ doit être similaire à la valeur de retour des modèles associés (tables) pour une visualisation correcte de "some_field" dans le panneau d'administration Django . Vous pouvez également utiliser:
def __str__(self):
return self.some_field