2013-11-06 10 views
4

Использование Django (нового для него и нового для Python в целом) для создания базы данных базовых контактов.Ошибка Django: TypeError: объект «NoneType» не имеет атрибута «__getitem__»

Попытка добавить запись через админ страниц в таблице Загрузил, код модели, для которых является:

class Contributor(models.Model): 

    first_name = models.CharField(max_length=20) 
    last_name = models.CharField(max_length=20) 
    organisation = models.ForeignKey('Organisation') 
    mode = models.CharField(max_length=10, blank=True) 
    email = models.CharField(max_length=30, blank=True) 
    landline = models.CharField(max_length=10, blank=True) 

def __unicode__(self): 
    print('%s %s' % (self.first_name, self.last_name)) 

Сообщение об ошибке я получаю:

Environment: 


    Request Method: POST 
    Request URL: http://127.0.0.1:8000/admin/ramapp/contributor/add/ 

    Django Version: 1.5.5 
    Python Version: 2.7.5 
    Installed Applications: 
    ('django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.admin', 
    'south', 
    'ramapp') 
    Installed Middleware: 
    ('django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware') 


    Traceback: 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
     115.       response = callback(request, *callback_args, **callback_kwargs) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper 
     372.     return self.admin_site.admin_view(view)(*args, **kwargs) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
     91.      response = view_func(request, *args, **kwargs) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 
     89.   response = view_func(request, *args, **kwargs) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner 
     202.    return view(request, *args, **kwargs) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper 
     25.    return bound_func(*args, **kwargs) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
     91.      response = view_func(request, *args, **kwargs) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func 
     21.     return func(self, *args2, **kwargs2) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/db/transaction.py" in inner 
     223.     return func(*args, **kwargs) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view 
     1009.     self.log_addition(request, new_object) 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/contrib/admin/options.py" in log_addition 
     530.    action_flag  = ADDITION 
    File "/Users/lemon/.virtualenvs/ram/lib/python2.7/site-packages/django/contrib/admin/models.py" in log_action 
     18.   e = self.model(None, None, user_id, content_type_id, smart_text(object_id), object_repr[:200], action_flag, change_message) 

    Exception Type: TypeError at /admin/ramapp/contributor/add/ 
    Exception Value: 'NoneType' object has no attribute '__getitem__' 

Grateful для любого помощь. Борясь! Благодарю.

Matt

ответ

14

Вы печати в методе __unicode__, вместо возврата строки.

5

Да, у вас уже есть решение?

class Contributor(models.Model): 
    first_name = models.CharField(max_length=20) 
    last_name = models.CharField(max_length=20) 
    organisation = models.ForeignKey('Organisation') 
    mode = models.CharField(max_length=10, blank=True) 
    email = models.CharField(max_length=30, blank=True) 
    landline = models.CharField(max_length=10, blank=True) 

    def __unicode__(self): 
     return '%s %s' % (self.first_name, self.last_name) 

Как примечание стороны, поскольку вы новичок в Python. Функции всегда возвращают что-то, когда нет return заявления, он возвращает None:

>>> def a(): 
...  print 'Hello there!' # No return statement 
... 
>>> def b(): 
...  return 'Bye!' 
... 
>>> result_a = a() 
Hello there! 
>>> print result_a 
None 
>>> result_b = b() 
>>> print result_b 
Bye! 
>>> 

И, конечно же, NoneType объектов не имеют какую-либо методы __getitem__ тогда как str объекты делают:

>>> result_a.__getitem__ 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'NoneType' object has no attribute '__getitem__' 
>>> result_b.__getitem__ 
<method-wrapper '__getitem__' of str object at 0xb7278e00> 

Надежда это яснее.

Смежные вопросы