2011-06-11 12 views
0

私はお互いに関連した2つのモデルを持っています。人為的な例では、最初のものは物のリストであり、2番目の物はそれぞれの物が好きな人のリストです。このレコードは私に関連していますか?

私は物事のリストを表示したいと思います。私がそれらの1つが好きだったら、その隣にアイコンを表示したいと思います。

>>> thing.likes_set.filter(user=user) 

をし、私が欲しいものを得るが、私はこれを置く必要がある上に、私はどこのコードではわからない:

# in the models 
class Things(models.Model): 
    name = models.CharField(max_length = 100) 

class Likes(models.Model): 
    user = models.ForeignKey(User) 
    thing = models.ForeignKey(Thing) 

# in the view 
@login_required 
def list_of_things(request): 
    things = things.objects.all() 
    context = RequestContext(request, {'things': things}) 
    return render_to_response('thinglist.html', context) 

# in the template 
{% for thing in things %} 
<li>{{ thing.name }} 
    ## PSUEDO CODE HERE 
    {% if I've liked this thing %} 
    <img src="like.png"> 
    {% endif %} 
</li> 

私はPythonシェルで、私はこれを行うことができますことを発見しました。私は物事モデルにメソッドを追加した場合、私は、私のテンプレートで、行うことができるとビットのために考えた:

{% if thing.liked_by_me %} 

しかし、それは、モデルがユーザー名を知っている必要になります。また、それは最高のパフォーマンスではないようです。

提案がありますか?

答えて

1

最高のパフォーマンスを得るために、あなたの好きなものやリストを得ることができます。

def list_of_things(request): 
    things = things.objects.all() 
    things_i_like = Like.objects.filter(user=current_user).values_list('things', flat=True) 
    context = RequestContext(request, {'things': things, 'things_i_like':things_i_like}) 
    return render_to_response('thinglist.html', context) 

values_listにのみ選択されますされますのみ

{% for thing in things %} 
<li>{{ thing.name }} 
    ## PSUEDO CODE HERE 
    {% if thing in things_i_like %} 
    ## IMAGE LINK 
    {% endif %} 
</li> 
{% endfor %} 

はその後、テンプレートが「もの」を反復処理し、単一の事がであるかどうかを確認することができ、リストにクエリセットを平らになる「もの」 フラット私はこれをテストしていませんが、それは動作するはずです「things_i_like」リスト

...

+0

おかげで、これはそれの世話をしました。私はこのようなコードで終わった: 'things_i_like = Likes.objects.filter(user = current_user).values_list( 'things__id'、flat = False)'次に、テンプレートの 'thing_id in things_i_like'。私はヒントをありがとう、以前はvalues_list機能を使用したことがありません。 – newz2000

関連する問題