#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, присвоив значение по умолчанию на этапе предварительного сохранения.
Это сработало.