Пометка избранного в наборе объектов Django - PullRequest
0 голосов
/ 28 декабря 2011

У меня есть таблица с именем Tip и таблица с именем FavoritedTips.Любимые Советы пользователей в моем приложении, а также идентификатор и идентификатор пользователя добавляются в таблицу favitedTips.

class FavoritedTip(models.Model):
    tip = models.ForeignKey(Tip)
    user = models.ForeignKey(User)

Теперь мне нужно поставить звездочку рядом с подсказкой, когда подсказки появятся в списке.Но, конечно, tips = Tip.objects.filter(list=list) не имеет столбца tip.favoritedtip.

Что проще всего сделать в моем шаблоне, чтобы узнать, какой совет был добавлен в избранное?

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Я предполагаю, что вы хотите отобразить список советов, и для каждого из них вам нужно знать, является ли это фаворитом текущего пользователя.

Вы можете сделать это с пользовательским templatetag, если вы действительноВы хотите сделать это на уровне шаблона, но вам лучше построить структуру данных в виде:

tips = Tips.objects.filter(my_filters)
user_favorite_tips = request.user.favoritedtip_set.values_list('pk', flat=True)
tips = [{'tip': tip, 
         'is_favorite': tip.pk in user_favorite_tips and True or False}
         for tip in tips]

А затем в вашем шаблоне:

<ul>
{% for tip in tips %}
    <li>{{ tip.tip.as_html }} 
        {% if tip.is_favorite %} <img src="star.png" />{% endif %}</li>
{% endfor %}
</ul>
0 голосов
/ 28 декабря 2011

Вы можете сделать это с 2 запросами, выполнив следующие действия:

1: создайте set, содержащий идентификаторы подсказок, которые предпочитает текущий пользователь

favorite_set = set(Tip.objects.filter(favoritedtip_set__user__exact=currentUser).values_list('id',flat=True))

2: (вы, вероятно, хотите сделать это в шаблоне). Для каждого объекта Tip проверьте, находится ли идентификатор этого объекта в favorite_set. Если это так, поставьте рядом звезду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...