2011-12-28 19 views
0

TipというテーブルとFavoritedTipsというテーブルがあります。ユーザーのお気に入りのアプリ内のヒントとヒントIDとユーザーIDが、favoritedTipsテーブルに追加されます。djangoオブジェクトセットのお気に入りのマーク

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

ヒントがリストに表示されたら、ヒントの隣に星印を付ける必要があります。もちろんtips = Tip.objects.filter(list=list)にはtip.favoritedtip列がありません。

どのチップがお気に入りになったのかを知るためにテンプレートで最も簡単なことは何ですか?

答えて

1

ヒントの一覧を表示したいと思います。それぞれのヒントを現在のユーザーのお気に入りであるかどうかを知る必要があります。

あなたが本当にテンプレートレベルでそれをしたい場合は、カスタム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

' tip.pk in user_favorite_tipsとTrueまたはFalse'これは第2の部分ではありませんか? – Elliott

+0

@stanこれで問題が発生しているのは、ログインユーザーがいない場合です。 – Brenden

+0

@Brenden、これは問題ではありません。あなたのユーザがログインしていない場合、あなたは同じように動作する 'AnonymousUser'インスタンスを持っています。 'auth'パッケージのドキュメントを深く見てください。 – Stan

0

あなたは次の操作を行って、2つのクエリでそれを行うことができます。

1:現在のユーザーが

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

2をお気に入りに追加しましたヒントのIDを含むsetを作成します(あなたはおそらくしたいですテンプレート内でこれを行うには)Tipオブジェクトごとに、そのオブジェクトのIDがfavorite_setであるかどうかをチェックします。そうであれば、その隣に星を置く。

+0

テンプレートで#2をどうやってやるのか知っていますか? – Brenden

+0

これをコンテキスト変数として渡します: 'return render_to_response( 'template.html'、{'favorite_set':お気に入りセット})'テンプレート内にif文を入れます{{if if tip.id in favorite_set%}

このヒントは好きです

{%endif%} ' – Elliott

関連する問題