2011-01-09 13 views
5

Ho la seguente classe che sto usando a pezzi Bookmark:Come posso attraversare una relazione generica inversa in un modello Django?

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

E sto definire una relazione generica inversa come segue:

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

In uno dei miei punti di vista ho generare un set di query di tutti i collegamenti e aggiungere questo ad un contesto:

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

Il problema che sto avendo è come attraversare la relazione generica nel mio modello. Per ciascun collegamento, desidero poter controllare l'attributo is_bookmarked e modificare il pulsante aggiungi/rimuovi segnalibro a seconda che l'utente abbia già inserito o meno il segnalibro. È possibile farlo nel modello? O devo fare qualche ulteriore filtraggio nella vista e passare un altro queryset?

risposta

4

Dal momento che è stato definito il campo GenericRelation 'preferiti', si può semplicemente scorrere che:

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