簡體   English   中英

Django ORM,並在模板中顯示許多字段

[英]Django ORM and displaying many to many fields in template

我無法在模板上顯示多對多字段中的數據。

我的模型如下所示:

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包含用戶,則添加文本“ you like this”,但是我做的沒錯。

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

我該如何執行看似簡單的任務?

在Secret類中添加一個自定義方法,並將其裝飾為以下屬性

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM