2017-03-05 8 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'は、ここで良いだろう。 –

関連する問題