Обратный поиск в поле Django m2m?

#python #django

#python #django

Вопрос:

У меня есть объект Django под названием «Family». «Family» имеет переменную «children», которая является полем «многие ко многим» класса, называемого «Child».

Если у меня есть «дочерний» объект, есть ли способ получить объект семейства, к которому принадлежит дочерний объект?

 Child
      some more fields...
Family
      children = models.ManyToManyField(Child)
      some more fields...
  

Ответ №1:

В этом случае Django автоматически создает для вас обратную связь, поэтому с экземпляром Child модели вы можете найти все экземпляры семейства, к которым принадлежит дочерний элемент:

 c = Child.objects.get(id=1)
c.family_set.all()  # gives you a list of Families
  

Однако, поскольку маловероятно, что дочерний элемент будет принадлежать нескольким семействам, на самом деле это не ситуация "Многие ко многим". Возможно, вы захотите рассмотреть возможность моделирования взаимосвязи с дочерним объектом:

 class Family(models.Model):
    pass # your fields here

class Child(models.Model):
    family = models.ForeignKey(Family)
  

Таким образом, вы можете получить семейство для дочернего элемента, используя mychild.family , и получить всех дочерних элементов в семействе, используя автоматическое обратное отношение django myfamily.child_set.all() .

Ответ №2:

Смотрите http://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

Синтаксис есть, child.family_set.all() но его можно изменить с помощью related_name параметра.