2013-08-16 3 views
1

사용자가 Types의 목록을 만들 수 있다고 가정 해 봅니다. 사용자가 유형 목록에 추가하면 사용자 및 유형이 ForeignKeys 인 새로운 UserType 객체가 생성됩니다.Django, 객체의 루프에서 관련 객체 가져 오기

다른 사용자는 사용자가 나열한 개별 유형을 '좋아할'수 있습니다 (UserTypes).

사용자의 UserTypes을 쿼리하면 템플릿에서 사용할 QuerySet의 각 UserTypeUserLikes의 번호를 가장 효과적으로 얻을 수 있습니까? 루프를 반복하고 각각을 쿼리하여 결과를 별도의 목록으로 반환할까요? 그건 꽤 지저분 해 보입니다.

class Type(model.Models): 
    name = models.CharField(max_length=100, blank=False) 
    description = models.TextField(max_length=1000, blank=True) 
    created_by = models.ForeignKey(User, blank=True, null=True, unique=False) 


class UserType(model.Models): 
    user = models.ForeignKey(User, unique=False) 
    type = models.ForeignKey(Type, unique=False) 
    is_active = models.BooleanField(default=True) 


class UserLike(model.Models): 
    user = models.ForeignKey(User, unique=False) 
    user_type = models.ForeignKey(UserType, unique=False) 

답변

1

UserType을 인스턴스에 설정된 UserLike의 간단한 계산에 대해 어떻게 : 당신이의 검색어에 UserTypes의 무리가있는 경우

some_user_type = UserType.objects.get(user_id=some_user_pk) 
like_count = some_user_type.userlike_set.all().count() 

하거나 사용할 수 있습니다 annotate :

from django.db.models import Count 
qs = UserType.objects.annotate(Count('userlike')) 

이제 쿼리 세트의 각 결과는 다음과 같습니다. qs[0].userlike__count

+0

이렇게하면 하나의 UserTy pe에 속하며 좋아하는 사람을 셀 수 있습니다. 내 UserLikes UserTypes의 QuerySet 주어진 내 템플릿에서 사용할 주어진 얻으려고 노력하고있어. – arooo

+0

좋아, 나는 당신이 queryset 주석을해야한다고 생각 ... 내 대답을 편집했습니다 – Fiver

+0

와우,이 존재하지 않았다. 몇 가지 예를 살펴보면 어떻게 작동하는지 훨씬 더 혼란 스럽습니다. 꽤 놀랐습니다. – arooo

관련 문제