#python #django #django-models #django-rest-framework #django-views
#python #django #django-models #django-rest-framework #django-views
Вопрос:
Здесь я использую api уведомлений. вот ссылка на эту ссылку api. Я должен следовать инструкциям, приведенным в файле github read me. Но когда я пытаюсь отправить электронное письмо от субъекта получателю. он показывает мне ошибку ‘int’ объект не имеет атрибута ‘_meta’. Поле actor и получатель принимают идентификаторы пользователей, и я ввел их вручную. Но все равно не сработало.
profiles/Views.py
class UserProfileFollowToggle(LoginRequiredMixin,View):
login_url = '/accounts/login/'
def post(self, request, *args, **kwargs):
user_to_toggle_pk=kwargs.get('pk')
username_to_toggle = request.POST.get("username")
profile_, is_following = UserProfile.objects.toggle_follow(request.user, request.user.id, user_to_toggle_pk ,username_to_toggle)
return redirect(f'/profiles/{username_to_toggle}')
profiles/models.py
class ProfileManager(models.Manager):
def toggle_follow(self, request_user,user_id,user_to_toggle_pk, username_to_toggle):
profile_ = UserProfile.objects.get(user__username__iexact=request_user.username)
is_following = False
follower = profile_.follower.filter(username__iexact=username_to_toggle).first()
if follower:
profile_.follower.remove(follower.id)
notify.send(user_id, recipient=user_to_toggle_pk, verb='unfollow you')
else:
new_follower = User.objects.get(username__iexact=username_to_toggle)
profile_.follower.add(new_follower.id)
notify.send(user_id, recipient=user_to_toggle_pk, verb='follow you')
is_following = True
return profile_, is_following
обратная трассировка:
Traceback (most recent call last):
File "C:UsersAHMEDanaconda3libsite-packagesdjangocorehandlersexception.py", line 34, in inner
response = get_response(request)
File "C:UsersAHMEDanaconda3libsite-packagesdjangocorehandlersbase.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:UsersAHMEDanaconda3libsite-packagesdjangocorehandlersbase.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:UsersAHMEDanaconda3libsite-packagesdjangoviewsgenericbase.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:UsersAHMEDanaconda3libsite-packagesdjangocontribauthmixins.py", line 52, in dispatch
return super().dispatch(request, *args, **kwargs)
File "C:UsersAHMEDanaconda3libsite-packagesdjangoviewsgenericbase.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:UsersAHMEDgrapPubgrabpublicprofilesviews.py", line 30, in post
profile_, is_following = UserProfile.objects.toggle_follow(request.user, request.user.id, user_to_toggle_pk ,username_to_toggle)
File "C:UsersAHMEDgrapPubgrabpublicprofilesmodels.py", line 22, in toggle_follow
notify.send(user_id, recipient=user_to_toggle_pk, verb='unfollow you')
File "C:UsersAHMEDanaconda3libsite-packagesdjangodispatchdispatcher.py", line 173, in send
return [
File "C:UsersAHMEDanaconda3libsite-packagesdjangodispatchdispatcher.py", line 174, in <listcomp>
(receiver, receiver(signal=self, sender=sender, **named))
File "C:UsersAHMEDgrapPubgrabpublicnotificationsbasemodels.py", line 288, in notify_handler
actor_content_type=ContentType.objects.get_for_model(actor),
File "C:UsersAHMEDanaconda3libsite-packagesdjangocontribcontenttypesmodels.py", line 40, in get_for_model
opts = self._get_opts(model, for_concrete_model)
File "C:UsersAHMEDanaconda3libsite-packagesdjangocontribcontenttypesmodels.py", line 27, in _get_opts
model = model._meta.concrete_model
Exception Type: AttributeError at /profiles/user-profile/2/
Exception Value: 'int' object has no attribute '_meta'
Если требуется больше информации, чем сообщите мне в разделе комментариев. Я обновлю свой вопрос с этой информацией.
Ответ №1:
Я думаю, что ошибка атрибута вызвана тем, что вы пытаетесь передать пользовательский pk в функцию отправки
notify.send(user_id, recipient=user_to_toggle_pk, verb='unfollow you')
^^^^^^^^^^^^^^^^
но функция отправки ожидает пользовательский объект.
Так что попробуйте что-то вроде этого..
user = User.objects.get(pk=user_to_toggle_pk)
notify.send(user_id, recipient=user, verb='unfollow you')
Комментарии:
1. Это сработало, но я также обновил актер, который является идентификатором пользователя в моем коде. вы можете обновить свои ответы и добавить эти два, кстати, спасибо. 🙂