【问题标题】:Django AttributeError when trying to add an object to a ManyToManyField尝试将对象添加到 ManyToManyField 时出现 Django AttributeError
【发布时间】:2020-06-11 09:23:34
【问题描述】:

我有一个网络应用程序,其中有一个朋友系统。之前你们在这里帮我解决了这个问题,但现在我遇到了另一个问题。

这是我在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_

这是错误

/mainapp/profile/don0024/add/ 处的 AttributeError “用户”对象没有“朋友”属性

追溯:

文件 “C:\Users\don0024\interests\interests_env\lib\site-packages\django\core\handlers\exception.py” 在内部 34. response = get_response(request)

文件 "C:\Users\don0024\interests\interests_env\lib\site-packages\django\core\handlers\base.py" 在 _get_response 115. response = self.process_exception_by_middleware(e, request)

文件 "C:\Users\don0024\interests\interests_env\lib\site-packages\django\core\handlers\base.py" 在 _get_response 113. response = Wrapped_callback(request, *callback_args, **callback_kwargs)

文件 “C:\Users\don0024\interests\interests_env\lib\site-packages\django\views\generic\base.py” 在视野中 71. return self.dispatch(request, *args, **kwargs)

文件 “C:\Users\don0024\interests\interests_env\lib\site-packages\django\views\generic\base.py” 在调度中 97. return handler(request, *args, **kwargs)

文件 “C:\Users\don0024\interests\interests_env\lib\site-packages\django\views\generic\base.py” 在得到 188. url = self.get_redirect_url(*args, **kwargs)

文件“C:\Users\don0024\interests\interests\mainapp\views.py”在 get_redirect_url 238. user.friends.remove(obj)

文件 “C:\Users\don0024\interests\interests_env\lib\site-packages\django\utils\functional.py” 在内部 257. return func(self._wrapped, *args)

异常类型:AttributeError at /mainapp/profile/don0024/add/ 异常值:“用户”对象没有属性“朋友”

obj.friends.remove(user) 删除当前用户并将其添加到 obj 上的 ManyToMany 字段。 我怎么能同时做相反的事情,所以将obj 添加到当前用户的manytomanyfield 中?

所以我想知道是否有办法解决我遇到的这个错误。

【问题讨论】:

    标签: python django python-3.x django-models django-views


    【解决方案1】:

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

    默认情况下,要为用户添加好友,您需要使用 _set

    user.friends_set.add(obj)

    但是你已经用“user_connections”覆盖了相关名称,所以我相信你应该这样做

    user.user_connections.add(obj)

    【讨论】:

    • 谢谢您,但我现在收到此错误'User' object has no attribute 'friends_set' 有什么我遗漏的吗?
    • 感谢您的额外帮助,但现在有了新的更改,它并没有反映在数据库中。只有原版是。因此,就像新的不会产生任何错误一样,它只是不会将其提交到数据库
    • 自创建关系以来您是否同步过数据库?
    • 我跑了python manage.py makemigrationspython manage.py migrate 你是这个意思吗?
    • 未知命令。如果我没记错的话,他们在 2.0 到来时将其删除
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2021-12-27
    • 2021-07-29
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多