Ошибка типа: __str__ возвращено нестроковое значение (тип NoneType) С моделями пакетов сторонних разработчиков Django

#python #django

#python #django

Вопрос:

Я установил пакет django_message в свое приложение django, используя django 2.0, и, хотя он работает на моей машине разработки, он выдает следующие ошибки при работе, когда я пытаюсь открыть список сообщений из консоли администратора Django.

 TypeError: __str__ returned non-string (type NoneType)
[22/Mar/2019 15:08:12] ERROR [django.request:118] Internal Server Error: /admin/django_messages/message/
Traceback (most recent call last):
  File "/opt/site_env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/opt/site_env/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/opt/site_env/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/options.py", line 574, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/opt/site_env/lib/python3.6/site-packages/django/utils/decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/opt/site_env/lib/python3.6/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 223, in inner
    return view(request, *args, **kwargs)
  File "/opt/site_env/lib/python3.6/site-packages/django/utils/decorators.py", line 62, in _wrapper
    return bound_func(*args, **kwargs)
  File "/opt/site_env/lib/python3.6/site-packages/django/utils/decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/opt/site_env/lib/python3.6/site-packages/django/utils/decorators.py", line 58, in bound_func
    return func.__get__(self, type(self))(*args2, **kwargs2)
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1570, in changelist_view
    cl = self.get_changelist_instance(request)
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/options.py", line 705, in get_changelist_instance
    self,
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/views/main.py", line 76, in __init__
    self.queryset = self.get_queryset(request)
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/views/main.py", line 320, in get_queryset
    filters_use_distinct) = self.get_filters(request)
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/views/main.py", line 130, in get_filters
    self.model, self.model_admin, field_path=field_path
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/filters.py", line 157, in create
    return list_filter_class(field, request, params, model, model_admin, field_path=field_path)
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/filters.py", line 168, in __init__
    self.lookup_choices = self.field_choices(field, request, model_admin)
  File "/opt/site_env/lib/python3.6/site-packages/django/contrib/admin/filters.py", line 195, in field_choices
    return field.get_choices(include_blank=False)
  File "/opt/site_env/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 812, in get_choices
    limit_choices_to)]
  File "/opt/site_env/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 811, in <listcomp>
    for x in rel_model._default_manager.complex_filter(
  File "/opt/site_env/lib/python3.6/site-packages/django/utils/encoding.py", line 34, in smart_text
    return force_text(s, encoding, strings_only, errors)
  File "/opt/site_env/lib/python3.6/site-packages/django/utils/encoding.py", line 67, in force_text
    s = str(s)
TypeError: __str__ returned non-string (type NoneType)
  

Самая большая проблема заключается в том, что это не единственная модель, которая выдает ошибку. У меня то же самое от django-allauth, выдающее ту же ошибку с SocialAccount.

Другая проблема заключается в том, что я не думаю, что мне следует исправлять коды из этих пакетов, но у меня ничего другого не осталось.

Также следует отметить, что ни одна из моделей для самого приложения не вызывает этих ошибок. Применяется только к django_allauth и django_messages. Однако сбой не происходит на моей машине разработки. Таблица mysql для django_messages пуста (без записей). Существует ли конфигурация, которая вызывает такого рода ошибки или что-то в этом роде. Я использую django 2.0 и python 3.6 в обеих средах.

Комментарии:

1. Используете ли вы это github.com/arneb/django-messages ? Если это так, посмотрим на Messge model( github.com/arneb/django-messages/blob/master/django_messages / … ) похоже, что поле «subject» пусто для любой записи в вашей рабочей таблице db.

2. Спасибо @ydrall, но таблица рабочей базы данных пуста. В нем нет записей.

Ответ №1:

Разобрался.

Оказывается, что все модели, в которых произошел сбой, связаны с пользовательской моделью, чей метод str() указывает на поле, столбец которого в базе данных равен нулю.

Решение: я должен сделать это поле не обнуляемым на уровне базы данных и на уровне django, присвоив значение по умолчанию на этапе предварительного сохранения.

Это сработало.