首页 > 解决方案 > Django. How to "join" two models that have foreignkeys to a third model?

问题描述

I'm learning Django and getting data from join tables is proving to be difficult. My models are:

class User(AbstractUser):
    pass

class Post(models.Model):
    username_p = models.ForeignKey("User", on_delete=models.CASCADE, related_name="user_p")
    post = models.CharField(max_length=365)
    like = models.PositiveIntegerField(default=0)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.username_p} posted {self.post} the {self.timestamp}, and the post has {self.like} likes"
    
    def serialize(self):
        return {
            "id": self.id,
            "username": self.username_p.username,
            "post": self.post,
            "like": self.like,
            "timestamp": self.timestamp.strftime("%b %d %Y, %I:%M %p"),
        }

class Follower(models.Model):
    followername = models.ForeignKey("User", on_delete=models.CASCADE, related_name="follower")
    followedname = models.ForeignKey("User", on_delete=models.CASCADE, related_name="followed")

    def __str__(self):
        return f"{self.followername} follows {self.followedname}"

I'm trying to join all tables to get all the posts (including username_p, post, like and timestamp) from all the followedname users that one followername user may have.

Any ideas on what query could work on my views.py?

标签: djangodjango-queryset

解决方案


followednames = (f.followedname for f in Follower.objects.get(followername=***followername you want***))
posts = Post.objects.all().filter("username_p__in"=followednames )

推荐阅读