2017-03-05 4 views
0

Ich habe Probleme beim Anzeigen von Daten aus einem Viele-zu-viele-Feld auf meiner Vorlage.Django ORM und viele bis viele Felder in Vorlage anzeigen

Meine Modelle sieht so aus:

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

Wenn ein Benutzer eine Schaltfläche klickt, wird der Benutzer mit dem Geheimnis über das all_likes Feld zugeordnet ist.

In meiner Vorlage zeige ich alle Geheimnisse an, dann eine "Löschen" -Schaltfläche, wenn die Sitzungs-ID der Benutzer-ID "posted_by" entspricht. Jetzt versuche ich nur den Text "Dir gefällt das" hinzuzufügen, wenn die All_Likes des Secret den Benutzer enthalten, aber nichts, was ich tue, ist richtig.

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

Wie mache ich diese scheinbar einfache Aufgabe?

Antwort

0

eine benutzerdefinierte Methode in geheimer Klasse hinzufügen und es als eine Eigenschaft dekorieren, wie unten

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

Dann in der Vorlage zu tun:

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

{%endif%} 
+0

'@ cached_property' hier besser wäre. –

Verwandte Themen