Как пройти обратное родовое отношение в шаблоне Django? - PullRequest
5 голосов
/ 10 января 2011

У меня есть следующий класс, который я использую для закладок:

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

И я определяю обратную родовую связь следующим образом:

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

В одном из моих представлений я генерирую набор запросов всех ссылок и добавляю это в контекст:

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

Проблема, с которой я сталкиваюсь, заключается в том, как пройти общие отношения в моем шаблоне. Для каждой ссылки я хочу иметь возможность проверить атрибут is_bookmarked и изменить кнопку добавления / удаления закладки в зависимости от того, установил ли пользователь эту закладку или нет. Возможно ли это сделать в шаблоне? Или мне нужно выполнить дополнительную фильтрацию в представлении и передать другой набор запросов?

1 Ответ

4 голосов
/ 10 января 2011

Поскольку вы определили поле GenericRelation 'bookmarks', вы можете просто пройти через это:

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