简体   繁体   English

在Django 2.0中过滤外键

[英]Filtering Foreign Keys in Django 2.0

So I need to filter posts, posted by users, who the user currently logged in is following. 因此,我需要过滤用户当前正在登录的用户发布的帖子。

Here's my models: 这是我的模型:

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)

And then in my views, my bit of Python / Django knowledge kind of directed me to write something like this (take a look particularly at the last bit, where I try to filter it so it only gets details from the users I follow. 然后,根据我的观点,我对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)

However, this doesn't seem to work. 但是,这似乎不起作用。 I'm greeted with this lovely error trying to get me to use the data from the model ProfileDetails - which would obviously make no sense, cause how else can I indicate the users I'm following in Connections. 我遇到了这个可爱的错误,试图让我使用ProfileProfiles模型中的数据-这显然毫无意义,原因是我还能如何指示我在Connections中关注的用户。

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

Been struggling with this for a few days and no longer sure what to search for. 经过几天的努力,不再确定要搜索的内容。

If it makes any difference, I'm using Python 3.6 and Django 2.0.4 on Postgresql. 如果有什么不同,我在Postgresql上使用Python 3.6和Django 2.0.4。

Suggestions would be appreciated. 建议将不胜感激。 :) :)

Thanks in advance. 提前致谢。 Ronald 罗纳德

该代码进入并从当前用户关注的用户(即当前用户为其follower )获取所有帖子:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM