【问题标题】:Related Field got invalid lookup: user相关字段查找无效:​​用户
【发布时间】:2021-03-23 09:25:33
【问题描述】:

我正在构建一个 BlogApp,但遇到了一个错误。

我想要做什么:-

我正在尝试从BlogPost Pageexclude 属于我的followers 的用户。

我正在使用exclude 方法来排除用户。

当我转到浏览器时,它会一直显示:-

相关字段查找无效:​​用户

models.py

 class Post(models.Model):
    post_owner = models.ForeignKey(User,default='',null=True,on_delete = models.CASCADE)
    post_title = models.CharField(max_length=500,default=''  )

views.py

def posts(request,user_id):
    followed_users= request.user.profile.followers.all()

    posts = Post.objects.filter(date_added__lte=now).exclude(post_owner__user=followed_users)

    context = {'posts':posts}
    return render(request, 'blogpost.html', context)

我不知道我做错了什么。

任何帮助将不胜感激。

【问题讨论】:

  • 你能展示一下你的Post 模特吗?
  • 添加了Post 模型。

标签: python django django-models django-views


【解决方案1】:

无需使用post_owner__user 查找,因为post_owner 已经是User 模型的别名。您也不能在这里按相等过滤,因为在表达式的右侧您没有User 的单个实例,而是一个查询集。 试试这个:

followed_users= request.user.profile.followers.all()
followed_users = list(followed_users.values_list('id', flat=True))
posts = Post.objects.filter(date_added__lte=now).exclude(post_owner_id__in=followed_users)

第一行将仅返回 User ID 字段值,您可以将其用于排除 in 表达式。

【讨论】:

  • 现在说 'str' 对象没有属性 'values_list'
  • 我猜你忘了第一行是followed_users= request.user.profile.followers.all() - 这是一个查询集,values_list 是它的方法之一。我更新了答案代码。
  • 就是这样,非常感谢。成功了
猜你喜欢
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 2018-06-08
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
相关资源
最近更新 更多