2013-04-23 13 views
42

mam ten błąd, ponieważ od dłuższego czasu, ale nie mogę zrozumieć to:Użycie przymusu Unicode: ciąg potrzebują lub buforze, NoneType znalezione podczas renderowania w django admin w

Caught TypeError podczas renderowania: zmuszanie do Unicode: konieczność ciąg lub bufor, NoneType znaleźć

zdarza admin gdy próbuję dodać lub zmienić na jedną z moich modeli (wyświetlacz działa poprawnie)

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

Każdy pomysł, co tu robię źle?

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 
+0

dlaczego brak 'od/import' i powielać' z/import' wszystkimi tego samego modułu? – KevinDTimm

+0

Widzę '{% dla pola w linii%}', co to jest 'linia'? – rednaw

+0

@rednaw Its In template /usr/local/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/includes/fieldset.html Więc nie wiem ani – Armance

Odpowiedz

77

Ten błąd zdarza się, gdy masz __unicode__ metodę, która jest powrotem pole, które nie jest wprowadzony. Każde puste pole to None, a Python nie może przekonwertować None, więc pojawia się błąd.

W twoim przypadku problem najprawdopodobniej jest związany z metodą PCE modelu __unicode__, a konkretnie z powrotem tego pola.

Można temu zapobiec poprzez zwrot wartości domyślnej:

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

Nawiasem mówiąc (dla tych, którzy mogą być z przymrużonymi oczami z późnej nocy), może być również spowodowane * niezwróceniem niczego * w '__unicode__'. :) – cloudrave

+1

Nawet jeśli pole obiektu wydaje się być w porządku na stronie Zmiany, możesz to zrobić, gdy jedno z powiązanych pól '__unicode__' zwróci Brak! – kissgyorgy

-5

Po pierwsze, sprawdź, czy cokolwiek wracają poprzez Unicode jest String.

Jeśli to nie jest ciągiem znaków można zmienić go na sznurku tak (gdzie self.id jest liczbą całkowitą)

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

następujących składników, które, jeśli to nie zadziała, uruchom ponownie ./ powłoka manage.py, aby zmiany zaczęły obowiązywać i spróbuj ponownie. Powinno działać.

Pozdrawiam

+1

Nie. Cokolwiek powrócisz przez '__unicode__' musi być obiektem * unikodowym *, a nie bytestringiem. Użyj 'unicode (self.id)' lub, jeśli musisz, 'u '% s'% self.id'. (To prawda, że ​​w tym przypadku odpowiedź zadziała, ponieważ id zawsze będzie liczbą całkowitą, ale odpowiedzi powinny dawać prawidłową implementację, a nie coś, co po prostu działa przypadkowo.) –

10

Ten błąd może wystąpić, gdy wrócisz obiekt zamiast ciąg w metodzie __unicode__. Na przykład:

class Author(models.Model): 
    . . . 
    name = models.CharField(...) 


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

Aby uniknąć tego błędu można oddać instancji autor Unicode:

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

W moim przypadku było to coś innego: Obiekt Byłem oszczędność powinna najpierw mieć identyfikator (np save() powinno być wywołane), zanim mógłbym ustanowić z nim jakąkolwiek relację.

0

Wartość zwracana def __unicode __ powinna być podobna do zwracanej wartości powiązanych modeli (tabel) w celu poprawnego wyświetlania "some_field" w panelu administracyjnym django. Można również użyć:

def __str__(self): 
    return self.some_field 
Powiązane problemy