2017-03-05 60 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'會更好這裏。 –

相關問題