Рассмотрим эту (django) модель:
class Source(models.Model):
# Some other fields
type = models.ForeignKey('Type')
class Type(models.Model):
# Some other fields
parent = models.ForeignKey('self')
Эта модель имеет внешний ключ для себя, создавая таким образом иерархию.
Допустим, у нас есть следующая иерархия:
Website
Blog
News
Social Network
Q&A
Forum
Radio
Government radio
Pirate radio
Commercial radio
Internet radio
Как эффективно выполнить запрос, чтобы, если я выберу Source
с помощью Type
, я также получил Sources
, у которого есть Type
, который является потомком данного типа?
Я пробовал обходить все дерево, но это, очевидно, не очень эффективно.
Другой вариант - использовать ManyToManyField и автоматически присоединять родительские типы, переопределяя save ().метод.Например, если выбран «блог», также создается запись для «веб-сайта».Но это кажется мне излишним.