如何将相关模型的结果包含到查询集中?

时间:2018-04-17 19:16:39

标签: django django-models django-queryset

我希望在帖子以for循环呈现时显示该帖子下方每个likers的{​​{1}}。以下是模型:

post

然后他们喜欢的帖子应该像这样呈现:

class Post(models.Model):
    title = models.CharField(max_length=75, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    creator = models.ForeignKey(User, null=True)
    topic = models.ForeignKey(Topic)
    body = models.TextField(max_length=10000)
    published = models.BooleanField(default=True)


class PostLike(models.Model):
    post = models.IntegerField(default=0) #post.id
    liker = models.IntegerField(default=0) #user.id of the post liker

目前(在部署之前)我在 {% for post in posts %} <div class="row"> <div>{{ post.created |timesince }}</div> <div>{{ post.creator }}</div> <div>{{ post.title }}</div> <div>{{ post.body }}</div> <ul> {% for liker in post.likers %} <li><a href="/path/to/profile/{{ liker.name}}">{{ liker.name}}</a></li> {% endfor %} </ul> {% endfor %}

中查询此类帖子
views.py

我想知道在帖子查询中放置likers的最佳方法是什么,以便它们可以在上面的模板中使用?

1 个答案:

答案 0 :(得分:1)

ForeignKey模型中使用IntegerFiled代替PostLike。哪个会给你你想要的东西。

class PostLike(models.Model):
    post = models.ForeignKey(Post) #post.id
    liker = models.ForeignKey(User,null=False)

现在,当您访问Post对象时,可以使用postlike_set来吸引所有人。

所以在你的模板中你可以使用

{% for liker in post.postlike_set.all %}
    <li><a href="/path/to/profile/{{ liker.name}}">{{ liker.name}}</a></li> 
{% endfor %}