2011-01-09 4 views
5

Ich habe die folgende Klasse, die ich mit einem Lesezeichen versehen Artikel bin mit:Wie kann ich eine umgekehrte generische Beziehung in einer Django-Vorlage durchlaufen?

class BookmarkedItem(models.Model): 
    is_bookmarked = models.BooleanField(default=False) 
    user = models.ForeignKey(User) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey() 

Und ich, die eine umgekehrte allgemeine Beziehung wie folgt:

class Link(models.Model): 
    url = models.URLField() 
    bookmarks = generic.GenericRelation(BookmarkedItem) 

In einem meiner Ansichten erstelle ich einen queryset von Alle Links und fügen Sie diese zu einem Kontext:

links = Link.objects.all() 
context = { 
    'links': links 
} 
return render_to_response('links.html', context) 

Das Problem, das ich habe, ist, wie die allgemeine Beziehung in meiner Vorlage zu durchqueren. Für jeden Link möchte ich das is_bookmarked-Attribut überprüfen und die Schaltfläche zum Hinzufügen/Entfernen von Lesezeichen ändern, je nachdem, ob der Benutzer bereits ein Lesezeichen hat oder nicht. Ist dies in der Vorlage möglich? Oder muss ich eine zusätzliche Filterung in der Ansicht durchführen und ein anderes Abfrage-Set übergeben?

Antwort

4

Da Sie das GenericRelation Feld ‚Lesezeichen‘ definiert haben, können Sie einfach durchlaufen, dass:

{% for bookmark in link.bookmarks.all %}