Ошибка атрибута в объекте /profiles/user-profile/2/ ‘int’ не имеет атрибута ‘_meta’

#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. Это сработало, но я также обновил актер, который является идентификатором пользователя в моем коде. вы можете обновить свои ответы и добавить эти два, кстати, спасибо. 🙂