Недействительный литерал django-уведомления для int () с базой 10

Я использую django-notification для создания уведомлений. на основе его документации, которую я написал:

url(r'^inbox/notifications/', include(notifications.urls, namespace='notifications')),

в моем urls.py. Я генерирую уведомление для тестирования, используя это в моем views.py:

guy = User.objects.get(username = 'SirSaleh')
notify.send(sender=User, recipient=guy, verb='you visted the site!')

и я могу легко получить количество непрочитанных уведомлений по этому URL:

http://127.0.0.1:8000/inbox/notifications/api/unread_count/

он возвращает {"unread_count": 1}, как я хочу. но с /api/unread_list/ я не могу получить список уведомлений и получаю такую ​​ошибку:

ValueError at /inbox/notifications/
invalid literal for int() with base 10: '<property object at 0x7fe1b56b6e08>'

Поскольку я новичок в использовании django-notifications, я буду благодарен за любую помощь.

Полный TraceBack

Среда:

Метод запроса: GET URL-адрес запроса: http://127.0.0.1:8000/inbox/notifications/api/unread_list/

Версия Django: 2.0.2 Версия Python: 3.5.2 Установленные приложения: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django .contrib.messages ',' django.contrib.staticfiles ',' django.contrib.sites ',' django.forms ',' rest_framework ',' allauth ',' allauth.account ',' allauth.socialaccount ',' guardian ',' axes ',' django_otp ',' django_otp.plugins.otp_static ',' django_otp.plugins.otp_totp ',' two_factor ',' invitations ',' avatar ',' imagekit ',' import_export ',' djmoney captcha, dal, dal_select2, widget_tweaks, braces, django_tables2, phonenumber_field, hitcount, el_pagination, maintenance_mode, notifications, mathfilters, myproject_web ',' Порядок ',' Фотогалерея ',' Поиск ',' Социальные сети ',' UserAccount ',' UserAuthentication ',' UserAuthorization ',' UserProfile '] Установленное промежуточное ПО: [' django.middleware.security.SecurityMiddleware ',' django .contrib.s essions.middleware.SessionMiddleware ',' django.middleware.locale.LocaleMiddleware ',' django.middleware.common.CommonMiddleware ',' django.middleware.csrf.CsrfViewMiddleware ',' django.contrib.auth.middleware. django.contrib.messages.middleware.MessageMiddleware ',' django.middleware.clickjacking.XFrameOptionsMiddleware ',' django_otp.middleware.OTPMiddleware ',' maintenance_mode.middleware.Main maintenanceModeMiddleware ']

Выслеживать:

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/core/handlers/exception.py" во внутреннем 35. response = get_response (запрос)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/core/handlers/base.py" в _get_response 128. response = self.process_exception_by_middleware (e, request)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/core/handlers/base.py" в _get_response 126. response = wrapped_callback (request, * callback_args, ** callback_kwargs)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/notifications/views.py" в live_unread_notification_list 164. если n.actor:

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/contrib/contenttypes/fields.py" в get 253. rel_obj = ct.get_object_for_this_type (pk = pk_val)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/contrib/contenttypes/models.py" в get_object_for_this_type 169. return self.model_class () ._ base_manager.using (self._state. db) .get (** kwargs)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/query.py" в get 394. clone = self.filter (* args, ** kwargs)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/query.py" в фильтре 836. return self._filter_or_exclude (False, * args, ** kwargs)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/query.py" в _filter_or_exclude 854. clone.query.add_q (Q (* args, ** kwargs) )

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/sql/query.py" в разделе add_q 1253., _ = self._add_q (q_object, self.used_aliases )

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/sql/query.py" в _add_q 1277. split_subq = split_subq,

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/sql/query.py" в build_filter 1215. condition = self.build_lookup (поиск, столбец, значение)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/sql/query.py" в build_lookup 1085. lookup = lookup_class (lhs, rhs)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/lookups.py" в init 18. self.rhs = self.get_prep_lookup ( )

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/lookups.py" в get_prep_lookup 68. return self.lhs.output_field.get_prep_value (self.rhs)

Файл "/home/saleh/Projects/myproject_web/lib/python3.5/site-packages/django/db/models/fields/ init .py" в get_prep_value 947. return int (value)

Тип исключения: ValueError в / inbox / notifications / api / unread_list / Exception Value: недопустимый литерал для int () с базой 10: ''


person SirSaleh    schedule 02.07.2018    source источник
comment
Какие у вас версии уведомлений Python, Django и Django?   -  person Selcuk    schedule 02.07.2018
comment
python3, Django==2.0.2 и django-notifications-hq==1.4.0 @Selcuk   -  person SirSaleh    schedule 02.07.2018
comment
У вас есть полная обратная связь?   -  person Cole    schedule 02.07.2018
comment
@Cole Я только что добавил.   -  person SirSaleh    schedule 02.07.2018


Ответы (3)


Actor_object_id должен быть CharField для поддержки первичных ключей на основе UUID.

person Alvaro Leonel    schedule 03.07.2018
comment
Спасибо, но я думаю, по крайней мере, я думаю, что будет лучше с проверкой на save. - person SirSaleh; 05.07.2018

ой! Это была моя ошибка. Я наконец выяснил, в чем была проблема. actor_object_id было полем notifications_notification таблицы, которое User.objects.get(username = 'SirSaleh') в ней сохранено. Это должно быть Interger (user_id актера).

Поэтому я удалил предыдущий экземпляр таблицы с измененным значением на User.objects.get(username = 'SirSaleh') для идентификатора пользователя. Задача решена.

Итак, почему тип actor_object_id - это CharField (varchar)? (по крайней мере, не знаю);))

person SirSaleh    schedule 02.07.2018

Это старое слово, но я знаю ответ.

В своем коде вы написали:

guy = User.objects.get(username = 'SirSaleh')
notify.send(sender=User, recipient=guy, verb='you visted the site!')

Вы заявляете, что хотите, чтобы guy был вашим отправителем. Однако в notify.send вы отметили отправителя как общий объект User, а не guy.

Итак, измените свой код на:

guy = User.objects.get(username = 'SirSaleh')
notify.send(sender=guy, recipient=guy, verb='you visted the site!')

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

person Andrew Pulley    schedule 04.12.2018