python - RelatedObjectDoesNotExist at /profiles/user-follow-feed/ 用户没有用户
问题描述
好吧,我只是想显示以下用户的反馈,但出现错误:RelatedObjectDoesNotExist at /profiles/user-follow-feed/ 用户没有用户。我不明白我该如何解决它。需要帮助来解决它。提前谢谢了。
视图.py
class FolloweHomeView(View):
def get(self, request, *args, **kwargs):
user = request.user.userprofile
is_following_user_ids = [x.user.id for x in user.follower.all()]
qs = Post.objects.filter(username__id__in=is_following_user_ids).order_by("-create_date")[:3]
return render(request, "profiles/follower_home_feed.html", {'object_list': qs})
模型.py
class ProfileManager(models.Manager):
def toggle_follow(self, request_user, username_to_toggle):
profile_ = UserProfile.objects.get(user__username__iexact=username_to_toggle)
user = request_user
is_following = False
if user in profile_.follower.all():
profile_.follower.remove(user)
else:
profile_.follower.add(user)
is_following = True
return profile_, is_following
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
follower = models.ManyToManyField(User, related_name ='is_following',blank=True,)
avatar = models.ImageField(("Avatar"), upload_to='displays', default = '1.jpg',height_field=None, width_field=None, max_length=None,blank = True)
create_date = models.DateField(auto_now_add=True,null=True)
objects = ProfileManager()
def __str__(self):
return f'{self.user.username}'
追溯:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/profiles/user-follow-feed/
Django Version: 3.0.3
Python Version: 3.8.3
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap3',
'accounts',
'posts',
'profiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\AHMED\grapPub\grabpublic\profiles\views.py", line 99, in get
is_following_user_ids = [x.user.id for x in user.follower.all()]
File "C:\Users\AHMED\grapPub\grabpublic\profiles\views.py", line 99, in <listcomp>
is_following_user_ids = [x.user.id for x in user.follower.all()]
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\db\models\fields\related_descriptors.py", line 420, in __get__
raise self.RelatedObjectDoesNotExist(
Exception Type: RelatedObjectDoesNotExist at /profiles/user-follow-feed/
Exception Value: User has no user.
如果需要比告诉我更多的细节,我会用这些信息更新我的问题
解决方案
follower
是模型的一个ManyToManyField
,User
所以x
列表推导中的 是一个User
对象:
is_following_user_ids = [x.id for x in user.follower.all()]
但是,您不需要执行这种逻辑,您可以直接过滤:
qs = Post.objects.filter(
username__user__is_following__user=request.user
).order_by('-create_date')[:3]
这将Post
在单个查询中查询对象。
注意:A
ForeignKey
不会将引用对象的字符串表示形式(或名称)存储在列中,它会将其引用的记录的主键存储在带有 字段_id
后缀的列ForeignKey
中。因此ForeignKey
s 通常不以后缀结尾name
。您可能需要考虑将字段重命名为username
author
.
注意:您可以使用
LoginRequiredMixin
mixin [Django-doc]将视图限制为对经过身份验证的用户的基于类的视图 。
推荐阅读
- installation - 亚行安装失败:INSTALL_FAILED_BLOCKED_CROSS_DOWN
- c# - .NET Core 上的 Windows/WSL 互操作在 windows 上是否有 AF_UNIX 支持
- angular - 使用惰性加载就地绑定 ngFor
- javascript - 如何在 VueJs 项目中导入单个 Lodash 函数?
- php - Apache 重写规则导致 JS 和 CSS 文件的“重定向过多”
- tsql - T-SQL:如果不存在则插入
- python - 熊猫在唯一值上迭代一列并获取另一列的值
- ansible - Ansible 模板循环
- flutter - 在颤振中,按下后退按钮时如何返回上一个 URL?
- python - 有缩进错误