2011-10-11 2 views
0

내 Django 앱에서 사용자는 카테고리별로 영화 모음을 만들 수 있습니다. 이것은 Movie, Collection 및 Addition의 3 가지 모델을 사용하여 표현됩니다 (추가 모델은 동영상, 컬렉션 및 사용자 인스턴스를 저장합니다). 아래 세 모델의 간체 버전이 있습니다.Django : 관련 필드를 기반으로하는 고유 한 QuerySet

class Movie(models.Model): 
    name = models.CharField(max_length=64) 

class Collection(models.Model): 
    name = models.CharField(max_length=64) 
    user = models.ForeignKey(User) 

class Addition(models.Model): 
    user = models.ForeignKey(User) 
    movie = models.ForeignKey(Movie) 
    collection = models.ForeignKey(Collection) 

예를 들어 사용자는 "80 's movies"컬렉션을 만들고 "Indiana Jones"동영상을 컬렉션에 추가 할 수 있습니다.

내 질문은 : 일련의 쿼리 필터를 기반으로하는 고유 한 영화 목록을 표시하려면 어떻게합니까? 지금 나는 하나 이상의 컬렉션에 추가 된 영화에 대해 많은 복제본을 얻고 있습니다. 별개의 객체를 얻으려면 대개 distinct()를 사용하지만이 경우 별개의 추가가 아닌 별개의 동영상이 필요하지만 사용자가 친구가 추가 한 영화를 볼 수 있도록 추가 모델을 쿼리해야합니다.

최적의 방법으로 모델을 설정하고 있습니까? 조언이나 도움을 많이 주시면 감사하겠습니다.

감사합니다.

답변

1

처음. 필요 없다고 생각합니다 여기 Addition 모델입니다. 당신은 다 대다 관계를 만들려고하지만,이 일을 documented 방법이있다 :

class Movie(models.Model): 
    name = models.CharField(max_length=64) 

class Collection(models.Model): 
    name = models.CharField(max_length=64) 
    user = models.ForeignKey(User) 
    movies = models.ManyToManyField('Movie', blank=True, null=True) 

둘째. 문서 says : ""역 "관계를 나타 내기 위해서는 모델의 소문자 이름을 사용하십시오."

Movie.objects.filter(collection__user=user).distinct() 
:

그래서 대답은 (위의 설정에)입니다