2008-10-21 1 views
2

У меня есть две модели. Мы будем называть их объект A и объект B. Их конструкция выглядит примерно так:Как написать метод в модели Django для извлечения связанных объектов?

class Foo(models.Model): 
    name = models.CharField() 

class Bar(models.Model): 
    title = models.CharField() 
    Foo= models.ForeignKey('myapp.Foo') 

Теперь предположим, что я хочу сделать метод в Foo, который возвращает все объекты Bar, которые ссылаются на этот экземпляр Foo. Как мне это сделать?

class Foo(models.Model): 
    name = models.CharField() 
    def returnBars(self): 
     ???? 

ответ

10

Вы получаете это бесплатно:

http://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objects

По умолчанию, вы можете получить доступ к менеджеру, который дает вам доступ к соответствующим пунктам через RELATEDCLASSNAME_set атрибута:

some_foo.bar_set.all() 

Или вы можете использовать аргумент related_name для ForeignKey, чтобы указать атрибут, который должен содержать обратное отношение идиокс Менеджер:

class Foo(models.Model): 
    name = models.CharField() 

class Bar(models.Model): 
    title = models.CharField() 
    foo = models.ForeignKey(Foo, related_name='bars') 

... 

some_foo.bars.all()