2016-06-01 11 views
0

Ich habe zwei Hauptmodelle, Comic und Issue, Ein einzelnes Comic hat mehrere Probleme. Ich versuche herauszufinden, wie man Probleme bekommt, die ein bestimmter Benutzer gelesen hat. Ich dachte daran, ein anderes Modell namens ReadIssue zu erstellen, um den Lesezustand zu speichern, aber ich kann nicht herausfinden, wie man je nach Benutzer eine Leseeigenschaft für jedes Problem erhält.django globales Objekt individuelle Benutzerbeziehung

Antwort

1

Von dem, was ich in Ihrem Text zu verstehen, könnte dies ein Weg sein, um die Basismodelle

class Comic(models.Model): 
    name = models.CharField(max_length=100) 

class Issue(models.Model): 
    comic = models.ForeignKey(Comic, related_name='issues') 
    title = models.CharField(max_length=100) 

    def was_read_by(self, user): 
     return bool(self.users.filter(user=user).count()) 

class ReadIssue(models.Model): 
    user = models.ForeignKey(User, related_name='read') 
    issue = models.ForeignKey(Issue, related_name='users') 

Jetzt bauen Sie Fragen wie diese

user = Users.objects.get(pk=1) 
comic = Comic.objects.get(pk=1) 

first_issue = comic.issues.all().first() 

user_read_it = first_issue.was_read_by(user) 

So überprüfen Sie nur, wenn die Kombination tun können user-issue existiert in der ReadIssue Tabelle. Natürlich wäre es eine gute Idee, ein index_together für dieses Paar hinzuzufügen, denn so werden Sie höchstwahrscheinlich alle Suchvorgänge in dieser Tabelle durchführen.

Und durch Hinzufügen dieser kleinen Hilfsmethoden zu den Modellen können Sie das Ganze sehr ausdrucksstark und leicht zu folgen machen.

+0

Danke! Genau das habe ich gesucht. Um dies in einer Vorlage zu verwenden, würde ich ein Template-Tag damit richtig machen? – ZucchiniZe

+0

Ja. Und einige Dinge, die Sie direkt verwenden können, wie zum Beispiel '{% for issue in comic.issues.all%}, um alle Probleme eines' Comic's zu durchlaufen. – C14L