2017-03-05 56 views
0

我无法在模板上显示来自多对多字段的数据。Django ORM并在模板中显示多个字段

我的模型看起来像这样:

class User(models.Model): 
first_name = models.CharField(max_length=100) 
last_name = models.CharField(max_length=100) 
email = models.EmailField() 
password = models.CharField(max_length=255) 

class Secret(models.Model): 
message = models.TextField(max_length=1000) 
posted_by = models.ForeignKey(User) 
all_likes = models.ManyToManyField(User, related_name="all_users") 
objects = SecretManager() 

当用户点击一个按钮一样,用户与通过all_likes场的秘密有关。

在我的模板,我显示所有的秘密,然后“删除”按钮,如果会话ID等于posted_by用户ID。现在我想要做的就是添加文字“你喜欢这个”,如果秘密的all_likes包含用户,但我没有做的是对的。

<table> 
    {% if secrets %} 
     {% for secret in secrets %} 
     <tr> 
      <td>{{secret.message}}</td> 
      <td>{{secret.created_at}}</td> 
      {% if request.session.id == secret.posted_by.id %} 
      <td>You posted this</td> 
      <td> <form action="{%url 'secrets:delete_secret' id=secret.id %}" method="POST"> 
      {% csrf_token %} 
        <input type="submit" name="delete" value="delete"> 
       </form> 
      {% endif %} 
      {% if request.session.id != secret.posted_by.id %} 
      <td> <form action="{%url 'secrets:create_like' user_id=request.session.id secret_id=secret.id %}" method="POST"> 
       {% csrf_token %} 
        <input type="submit" name="Like" value="Like"> 
       </form> 
      {% endif %} 
////HERE I WANT TO ADD LOGIC TO DiSPLAY "YOU LIKED THIS" IF REQUEST.SESSION.ID IS EQUAL TO SECRET.ALL_LIKES.USER.ID//// 
      </td> 
     </tr> 
     {% endfor %} 
    {% endif %} 
    </table> 

我该如何做这个看似简单的任务?

回答

0

秘密类添加自定义方法和装饰它作为一个属性如下

@property 
def all_like_ids(self): 
    return [x.id for x in self.all_likes] 

然后在你的模板做:

{%if request.session.id in secret.all_like_ids %} 

{%endif%} 
+0

'@ cached_property'会更好这里。 –

相关问题