Django无法获得模板

时间:2018-04-18 14:07:44

标签: django django-models django-queryset

我想展示下面每个帖子的相似内容。

以下是模型:

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 %} 

但模板中没有任何内容。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您的likers方法返回PostLike个对象的查询集。如果您想要喜欢的用户名,那么您需要关注liker模型的User外键。

除非liker.name模型具有User字段,否则您name也无效。使用类似liker.usernameliker.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 %}