我想展示下面每个帖子的相似内容。
以下是模型:
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)
def likers(self):
return self.postlike_set.all()
class PostLike(models.Model):
post = models.ForeignKey(Post)
liker = models.ForeignKey(User, null=True, related_name="post_liker")
在模板中我有:
{% for post in posts %}
<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 %}
但模板中没有任何内容。
我该如何解决这个问题?
答案 0 :(得分:2)
您的likers
方法返回PostLike
个对象的查询集。如果您想要喜欢的用户名,那么您需要关注liker
模型的User
外键。
除非liker.name
模型具有User
字段,否则您name
也无效。使用类似liker.username
或liker.first_name
的内容。
{% for post_liker in post.likers %}
<li><a href="/path/to/profile/{{ post_liker.liker.username }}">{{ post_liker.liker.username }}</a></li>
{% endfor %}
在这种情况下,使用多对多字段可能更简单,而不是创建自己的连接表。
class Post(models.Model):
...
likers = models.ManyToManyField('User')
然后,您的模型中不需要likers
方法,并且您的模板会简化为:
{% for liker in post.likers.all %}
<li><a href="/path/to/profile/{{ liker.name }}">{{ liker.username }}</a></li>
{% endfor %}