2013-04-23 12 views
42

Ben uzun zamandan beri bu hatayı var ama onu anlamaya olamaz:Coercing Unicode için: Django admin işlerken ihtiyaç dize veya tampon, NoneType bulundu

yakalandı TypeError render ederken: Unicode etmeye zorluyor: gereksinimini

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') 
: Model dize veya tampon, NoneType
ekleyebilir veya (ekran çalışıyor)

Bu benim modelini seçebilir değiştirmeye çalıştığınızda O yönetici olur

bulundu olduğunu

Burada neyin yanlış yaptığına dair bir fikriniz var mı?

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

neden import' aynı modülün tüm/dan 'dan/import' ve yinelenen' eksikliği? – KevinDTimm

+0

{% satır% alanında%} 'yi görüyorum,' line' nedir? – rednaw

+0

@rednaw Onun şablonu /usr/local/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/includes/fieldset.html Yani ben – Armance

cevap

77

bir girilmezse bir alan dönen bir __unicode__ yöntemine sahip bu hata olur. Herhangi bir boş alan None ve Python, None'u dönüştüremiyor, böylece hatayı alıyorsunuz. Sizin durumunuzda, büyük olasılıkla, PCE modelinin __unicode__ yöntemiyle, özellikle de geri dönmesiyle ilgilidir.

Sen varsayılan bir değer dönen bunu önleyebilirsiniz: Eğer __unicode__ yönteminde bir dize yerine bir nesne döndüğünüzde

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

Tesadüfen (gözleri şişmiş olanlar için) Gecelik bir geceden), * __unicode__'da * bir şey döndürmemesi de neden olabilir. :) – cloudrave

+1

Nesnenin alanı bir Değiştir sayfasında iyi görünüyor olsa bile, '__unicode__' ilgili alanlardan biri döndüğünde buna sahip olabilirsiniz! – kissgyorgy

-5

İlk olarak, unicode yoluyla iade ne olursa olsun kontrol String olduğunu.

Eğer hala çalışmıyorsa, senin ./ yeniden başlatın (self.id bir tam sayı) Böyle bir dize

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

aşağıdakilere değiştirebilirsiniz bir dize değilse Değişikliklerin etkili olması için manage.py kabuk ve tekrar deneyin. İşe yaramalı.

Saygılarımızla

+1

Hayır. '__unicode__' üzerinden ne döndürürseniz bir * unicode * nesnesi olmalı, bytestring değil. 'Unicode (self.id)' veya '% s'% self.id 'değerini kullanmanız gerekiyorsa kullanın. (Bu durumda cevap işe yarayacaktır, çünkü id her zaman bir tamsayı olacaktır, ancak cevaplar, doğru bir şekilde, kaza ile işe yarayacak bir şey değil, doğru uygulamayı vermelidir.) –

10

bu hata oluşabilir. Örneğin:

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


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

Bu hatayı önlemek için, unicode yazar örneğini yayınlayabilirsiniz:

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

Benim durumumda bu oldu başka bir şey: Ben ilk olarak bir kimliğe sahip olmalıdır saklıyordum nesne (örneğin Bununla herhangi bir ilişki kurabilmeden önce save() çağrılmalıdır).

0

__unicode __ dönüş değeri, django yönetici panelindeki "some_field" in doğru görüntülenmesi için ilgili modellerin (tabloların) dönüş değerlerine benzer olmalıdır. de kullanabilirsiniz:

def __str__(self): 
    return self.some_field