2013-08-17 1 views
0

게시글에서 본이 모델이 있습니다.ManyToManyField를 쿼리하는 방법

models.py :

class Person(models.Model): 
    name = models.CharField(max_length=100) 
    relationships = models.ManyToManyField('self', through='Relationship', 
              symmetrical=False, 
              related_name='related_to') 

    def __unicode__(self): 
     return self.name 

RELATIONSHIP_FOLLOWING = 1 
RELATIONSHIP_BLOCKED = 2 
RELATIONSHIP_STATUSES = (
    (RELATIONSHIP_FOLLOWING, 'Following'), 
    (RELATIONSHIP_BLOCKED, 'Blocked'), 
) 

class Relationship(models.Model): 
    from_person = models.ForeignKey(Person, related_name='from_people') 
    to_person = models.ForeignKey(Person, related_name='to_people') 
    status = models.IntegerField(choices=RELATIONSHIP_STATUSES) 

    def __unicode__(self): 
     return "%s %s %s" % (self.from_person, self.status, self.to_person) 

    def add_relationship(self, person, status): 
     relationship, created = Relationship.objects.get_or_create(
      from_person=self, 
      to_person=person, 
      status=status) 
     return relationship 

    def remove_relationship(self, person, status): 
     Relationship.objects.filter(
      from_person=self, 
      to_person=person, 
      status=status).delete() 
     return 

    def get_relationships(self, status): 
     return self.relationships.filter(
      to_people__status=status, 
      to_people__from_person=self) 

    def get_related_to(self, status): 
     return self.related_to.filter(
      from_people__status=status, 
      from_people__to_person=self) 

    def get_following(self): 
     return self.get_relationships(RELATIONSHIP_FOLLOWING) 

    def get_followers(self): 
     return self.get_related_to(RELATIONSHIP_FOLLOWING) 

어떻게 사람이 다음 사람이 따르는 사람, 또는 사람을받을 수 있나요? 나는이 일을 시도 :

AttributeError: 'Person' object has no attribute 'add_relationship' 

어떻게 이러한 개체를 쿼리 : 나는 오류,

>>><Relationship: Relationship object> 
>>>john.get_following() 
>>>[<Person: Paul>] 

그러나이 일에

>>>from twitter.models import Person, Relationship 
>>>john = Person.objects.create(name='John') 
>>>paul = Person.objects.create(name='Paul') 
>>>from twitter.models import RELATIONSHIP_FOLLOWING 
>>>john.add_relationship(paul, RELATIONSHIP_FOLLOWING) 

을, 나는 이런 식으로 뭔가를 기다리고 있었다? 제발, 나를 안내 해줘.

답변

1

add_relationship() 메서드를 Relationship에 넣습니다. 대신 (및 기타)를 Person에 올려 놓으십시오.