Как получить набор запросов для всех моделей в Django (1.2) ManyToMany?

У меня есть модель проекта, которая имеет обязательный атрибут, который представляет собой поле ManyToMany, связывающее другие проекты. То есть каждый проект может иметь более 0 проектов, которые должны быть завершены, прежде чем он может быть завершен.

class Project(models.Model):
    title = models.CharField(max_length=200)
    prequisites = models.ManyToManyField('self', null=True, blank=True)

Как вернуть все проекты, которые являются обязательными для этого проекта? Я хочу сделать что-то вроде этого:

project_a = Project.objects.get(title="My Cool Project")

for pre_requisite in project_a.prequisites:
    # do something with pre_requisite

но project_a.prequisites возвращает ManyRelatedManager объект. Кажется, что специальный атрибут _set тоже не работает:

project_a.prequisites_set
AttributeError: 'Project' object has no attribute 'prequisites_set'

Я думаю о моделировании предпосылок в другой модели:

class ProjectPrequisite(models.Model):
    project = models.ForeignKey(Project)
    prequisite = models.ForeignKey(Project)

но я бы предпочел сделать все правильно, если вы понимаете, о чем я.

1 ответ

Решение

project_a.prequisites.all()

Вернем все Project экземпляры, связанные через ваше множество

менеджер позволяет фильтровать и получать объекты наборов запросов, как если бы objects собственность ваших моделей

это позволит вам сделать что-то вроде

project_a.prequisites.filter(title='a_prereq_title')

Другие вопросы по тегам