2011-06-11 1 views
0

서로 관련이있는 두 개의 모델이 있습니다. 고안된 예를 들어, 첫 번째는 사물의 목록이고 두 번째는 각 사물을 좋아하는 사람들의 목록입니다.이 레코드가 나와 관련이 있습니까?

나는 물건 목록을 보여주고 싶습니다. 그 중 하나가 마음에 드시면 옆에 아이콘을 보여주세요.

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

나는 파이썬 쉘에서 나는이 작업을 수행 할 수 있다는 것을 발견했습니다. 나는 내 물건 모델에 메서드를 추가 한 경우 나, 내 템플릿에, 할 수있는 것을 조금 생각 :

{% 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.i in things_i_like'. 팁을 주셔서 감사 드리며 전에 values_list 기능을 사용한 적이 없습니다. – newz2000