【问题标题】:Django ValueError: Cannot use QuerySet for "": Use a QuerySet for "User"Django ValueError:不能为“”使用查询集:为“用户”使用查询集
【发布时间】:2021-04-24 20:52:39
【问题描述】:

我正在 CS50w 中开展一个项目,我必须在其中显示我正在关注的用户的帖子,但出现以下错误

ValueError:无法将 QuerySet 用于“Following”:将 QuerySet 用于“User”。

models.py:

class Post(models.Model):
    """Tracks all the posts"""
    text = models.TextField(max_length=256)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date_posted = models.DateTimeField(auto_now_add=True)

class Following(models.Model):
    """Tracks the following of a user"""
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    following = models.ForeignKey(User, on_delete=models.CASCADE, related_name="followers")

这就是我试图检索我关注的用户的帖子的方式: views.py

# Gets all the posts from the users the current user is following
followings_usernames = Following.objects.filter(user=request.user)
posts = Post.objects.filter(user=followings_usernames)

感谢任何帮助。

【问题讨论】:

    标签: django cs50


    【解决方案1】:

    您可以通过 Post.user 字段通过反向关系 (followers) 基于字段 (Following.user) 进行过滤:

    posts = Post.objects.filter(user__followers__user=request.user)
    

    请参阅 Django 文档以了解 lookups that span relationships 以及使用双下划线分隔模型和字段。

    【讨论】:

    • 谢谢。就是这样。
    【解决方案2】:

    试试这个,可能会有帮助

      # Gets all the posts from the users the current user is following
        followings_usernames = list(Following.objects.filter(user=request.user).values_list('user', flat=True))
        posts = Post.objects.filter(user__in=followings_usernames)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 2021-08-16
      • 1970-01-01
      • 2023-04-03
      • 2019-07-21
      • 2018-11-08
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多