Django AttributeError при попытке добавить объект в ManyToManyField - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть веб-приложение, где у меня есть система друзей. Вы, ребята, помогли мне с этим раньше, но теперь у меня есть другая проблема.

Вот мои модели в UserProfileInfo

friends = models.ManyToManyField(User,blank=True,related_name='user_connections')

А вот мое представление AddFriendRedirect

class AddFriendRedirect(RedirectView):
    def get_redirect_url(self,*args,**kwargs):
        username = self.kwargs.get("username")
        obj = get_object_or_404(UserProfileInfo,slug=username)
        url_ = obj.get_absolute_url()
        user = self.request.user
        if user.is_authenticated:
            if user in obj.friends.all():
                obj.friends.remove(user)
                user.friends.remove(obj) # these are the fields causing the error
            else:
                obj.friends.add(user)
                user.friends.add(obj) # these are the fields causing the error
        return url_

А вот и ошибка

AttributeError в / mainapp / profile / don0024 / add / 'User' объект не имеет атрибута 'friends'

Трассировка:

Файл "C: \ Users \ don0024 \ Interest \ Interest_env \ lib \ site-packages \ django \ core \ handlers \ exception.py" во внутреннем 34. response = get_response (запрос)

Файл "C: \ Users \ don0024 \ Interest \ Interest_env \ lib \ site-packages \ django \ core \ handlers \ base.py" в _get_response 115. response = self.process_exception_by_middleware (e, запрос)

Файл "C: \ Users \ don0024 \ Interest \ Interest_env \ lib \ site-packages \ django \ core \ handlers \ base.py" в _get_response 113. response = wrapped_callback ( request, * callback_args, ** callback_kwargs)

Файл "C: \ Users \ don0024 \ Interest \ Interest_env \ lib \" site-packages \ django \ views \ generic \ base.py "в представлении 71. вернуть self.dispatch (запрос, * аргументы, ** kwargs)

файл" C: \ Users \ don0024 \ интересов \oples_env \ lib \ site-packages \ django \ views \ generic \ base.py "в диспетчере 97. обработчик возврата (запрос, * аргументы, ** kwargs)

файл" C: \ Users \ don0024 \ Interest \ Interest_env \ lib \ site-packages \ django \ views \ generic \ base.py "в get 188. url = self.get_redirect_url (* args, ** kwargs)

Файл" C : \ Users \ don0024 \ интересов \ интересов \ mainapp \ views.py "в get_redirect_url 238. user.friends.remove (obj)

Файл" C: \ Users \ don0024 \ Interest \ Interest_env \ lib \ site-packages \ django \ utils \ functions.py "во внутренней части 257. возвращает удовольствие c (self._wrapped, * args)

Тип исключения: AttributeError в / mainapp / profile / don0024 / add / Значение исключения: объект «Пользователь» не имеет атрибута «друзья»

. obj.friends.remove(user) удаляет и добавляет текущего пользователя в поле ManyToMany obj. Как я могу сделать противоположное в то же время, поэтому добавьте obj в поле manytomanyy текущего пользователя?

Поэтому мне интересно, есть ли способ решить эту ошибку, которую я получаю.

1 Ответ

0 голосов
/ 27 февраля 2020

См. https://docs.djangoproject.com/en/3.0/ref/models/relations/

По умолчанию Чтобы добавить друзей в пользователя, вам нужно использовать _set

user.friends_set.add(obj)

Однако у вас есть перезаписать связанное имя с "user_connections", поэтому я считаю, что вы должны сделать

user.user_connections.add(obj)

...