【问题标题】:Filtering Foreign Keys in Django 2.0在 Django 2.0 中过滤外键
【发布时间】:2018-04-28 11:19:12
【问题描述】:

所以我需要过滤由当前登录的用户关注的用户发布的帖子。

这是我的模型:

class ProfileDetails(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    provider = models.CharField(max_length=20, null=True, blank=True)
    firstname = models.CharField(max_length=25, null=True, blank=True)
    lastname = models.CharField(max_length=25, null=True, blank=True)
    username = models.CharField(max_length=24, null=True, blank=True, unique=True)

    def __str__(self):
        return str(self.user)


class Posts(models.Model):
    post_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(ProfileDetails, on_delete=models.CASCADE, null=True)
    text = models.TextField(max_length=280, null=True, blank=True)
    video = models.CharField(max_length=24, null=True, blank=True)
    timestamp = models.DateTimeField(default=datetime.datetime.now, blank=True)

    def __str__(self):
        return str(self.user)


class Connection(models.Model):
    follower = models.ForeignKey(ProfileDetails, related_name='follower', on_delete=models.SET_NULL, null=True)
    following = models.ForeignKey(ProfileDetails, related_name='following', on_delete=models.SET_NULL, null=True)
    # follower = models.ManyToManyField(ProfileDetails, related_name='follower')
    # following = models.ManyToManyField(ProfileDetails, related_name='following')
    date_created = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return str(self.follower)

然后在我看来,我的一点 Python / Django 知识指导我写这样的东西(特别看一下最后一点,我尝试过滤它,所以它只从我的用户那里获取详细信息跟随。

def index(request):
    checkuser = request.user
    print(checkuser)
if ProfileDetails.objects.filter(user=checkuser):
            print("user previously logged in")
            sns = get_object_or_404(SocialAccount, user=checkuser)
            autoupdateprofile = get_object_or_404(ProfileDetails, user=checkuser)
            autoupdateprofile.lastlogin = datetime.datetime.now()
            autoupdateprofile.save(update_fields=["lastlogin"])

            # print(sns.provider)

            details = get_object_or_404(ProfileDetails, user=checkuser)
            videos = Posts.objects.filter(media=True, imade=True).order_by("-timestamp")[0:6]
            followercount = Connection.objects.filter(follower=details).count()
            follows = Connection.objects.filter(follower=details)

            followerposts = Posts.objects.filter(user=follows)



            for a in followerposts:

                print(a)

return render (request, 'index.html', context)

但是,这似乎不起作用。我收到了这个可爱的错误,试图让我使用模型 ProfileDetails 中的数据 - 这显然没有任何意义,因为我还能如何指示我在 Connections 中关注的用户。

Exception Value:    
Cannot use QuerySet for "Connection": Use a QuerySet for "ProfileDetails".

为此苦苦挣扎了几天,不再确定要搜索什么。

如果有什么不同,我在 Postgresql 上使用 Python 3.6 和 Django 2.0.4。

建议将不胜感激。 :)

提前致谢。 罗纳德

【问题讨论】:

  • 试试这个:Posts.objects.filter(user__following__follower=ProfileDetails.objects.get(user=self.request.user))

标签: python django postgresql foreign-keys key


【解决方案1】:

此代码进入并获取当前用户关注的用户的所有帖子(即,当前用户是follower):

Posts.objects.filter(user__following__follower=ProfileDetails.objects.get(user=self.request.user))

【讨论】:

  • 对不起,伙计,不工作。我试过Posts.objects.filter(user__follower__contains=self.request.user) 异常值:无法查询“ronald”:必须是“Connection”实例。然后在那之后我尝试了Posts.objects.filter(user__follower__contains=details) - 给了我同样的错误。我希望这会奏效 - 但它没有:Posts.objects.filter(user__follower__contains=follows)
  • 我已根据您的错误编辑了我的答案。你可以试试看它是否有效?
  • 感谢最后一个完美的工作!正是我需要的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 2012-01-23
  • 1970-01-01
  • 2019-07-23
  • 2013-09-23
  • 2018-01-05
  • 2013-09-05
相关资源
最近更新 更多