Допустим, в моих моделях для приложения django у меня есть три модели, каждая из которых имеет отношение ко многим (это пример с игрушкой).
class User(models.Model):
permissions_group = models.ManyToManyField(Group)
class Group(models.Model):
permissions_area = models.ManyToManyField(Area)
class Area(models.Model):
#other irrelevant field data...
pass
Я хотел бы иметь поле в моей модели User
, которое выражает отношения между пользователями и областями, что является неявной моделью «многие ко многим» (то есть я не определяю дополнительные отношения, которые создают дополнительные таблицы в базе данных, я использую отношения, которые проходят через группы).
Я рассмотрел вопрос об использовании настраиваемого менеджера, но, похоже, он не позволяет выполнять фильтрацию отношений, которую можно увидеть с помощью стандартного менеджера RelatedField; Я мог бы просто установить украшенное свойство для класса:
class User(models.Model):
@property
permissions_areas(self):
return Area.objects.filter(group__in=self.permissions_groups.all())
Но это кажется неуклюжим и не использует никаких соглашений django. Есть ли обычный способ сделать это в django, используя инструменты Django (пользовательские менеджеры или что-то похожее на RelatedManager
), которые мне не хватает?