Opened 18 years ago

Closed 18 years ago

#4463 closed (invalid)

Admin crashed if None returned by __unicode__ and list_display not defined

Reported by: hidded <me@…> Owned by: Adrian Holovaty
Component: contrib.admin Version: other branch
Severity: Keywords: unicode unicode-branch admin
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Subj.

Testcase:

  name = models.CharField(verbose_name=u'name', maxlength=255, null=True, blank=True)

  def __unicode__(self):
    return self.name

Traceback:

Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/django/template/__init__.py" in render_node
  764. result = node.render(context)
File "/usr/lib/python2.5/site-packages/django/template/__init__.py" in render
  909. dict = func(*args)
File "/usr/lib/python2.5/site-packages/django/contrib/admin/templatetags/admin_list.py" in result_list
  206. 'results': list(results(cl))}
File "/usr/lib/python2.5/site-packages/django/contrib/admin/templatetags/admin_list.py" in results
  201. yield list(items_for_result(cl,res))
File "/usr/lib/python2.5/site-packages/django/contrib/admin/templatetags/admin_list.py" in items_for_result
  137. attr = attr()
File "/usr/lib/python2.5/site-packages/django/db/models/base.py" in __str__
  91. return force_unicode(self).encode('utf-8')
File "/usr/lib/python2.5/site-packages/django/utils/encoding.py" in force_unicode
  38. s = unicode(s)

  TypeError at /admin/blog/contributor/
  coercing to Unicode: need string or buffer, NoneType found

Change History (2)

comment:1 by hidded <me@…>, 18 years ago

P.S.: Crash at draw list-of-objects page...

P.P.S: Also admin crashed when draw breadcrumbs on edit-of-object page:

Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/django/template/__init__.py" in render_node
  764. result = node.render(context)
File "/usr/lib/python2.5/site-packages/django/template/__init__.py" in render
  800. return self.filter_expression.resolve(context)
File "/usr/lib/python2.5/site-packages/django/template/__init__.py" in resolve
  606. obj = func(obj, *arg_vals)
File "/usr/lib/python2.5/site-packages/django/template/defaultfilters.py" in _dec
  25. args[0] = force_unicode(args[0])
File "/usr/lib/python2.5/site-packages/django/utils/encoding.py" in force_unicode
  38. s = unicode(s)

  TypeError at /admin/blog/contributor/1/
  coercing to Unicode: need string or buffer, NoneType found

comment:2 by Malcolm Tredinnick, 18 years ago

Resolution: invalid
Status: newclosed

(I'm guessing this is on the unicode branch.)

If your __unicode__ method is returning None, that's a bug in your code. You must always return a unicode object from ___unicode___ and a str object from __str__. That's a Python requirement.

Try returning unicode(self.name).

Note: See TracTickets for help on using tickets.
Back to Top