#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
параметра.