2013-08-17 58 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) 

我如何讓人們在人以下,或人的人下?我試着這樣做:

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

這樣做之後,我期待這樣的事情:

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

但是,我得到的錯誤:

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

如何查詢這些對象呢?請引導我。

回答

1

你把add_relationship()方法寫在Relationship上。把它(和其他人)改爲Person

相關問題