У меня есть много ко многим ко многим отношениям между 3 моделями, а именно - Пользователь, Проект и Роль. Пользователь может участвовать в нескольких проектах, играя несколько ролей, даже в одном проекте. Это отношение моделируется следующими классами в Django:
class User(models.Model):
name = models.CharField()
class Project(models.Model):
name = models.CharField()
class Role(models.Model):
name = models.CharField()
class UsersProjects(models.Model):
user = models.ForeignKey(User)
project = models.ForeignKey(Project)
roles = models.ManyToManyField(Role)
Я уже создал все представления CRUD для каждого типа объекта. Мне нужно предоставить набор форм для добавления / редактирования пользовательских проектов-ролей в User
режиме редактирования. И в представлении редактирования Project
мне нужно предоставить набор форм для добавления / редактирования пользовательских ролей. Например, в представлении редактирования проекта я в основном сделал следующее:
projectedit_formset_class = inlineformset_factory(Project, UsersProjects)
project = Project.objects.get(id=2)
projectedit_formset = projectedit_formset_class(instance=project)
А потом в шаблоне:
<form method="post" action=".">
{{ projectedit_formset.as_table }}
</form>
Здесь отображаются поля выбора для пользователя и поля множественного выбора для роли для каждого отношения пользователя и роли в проекте. Проблема в том, что, когда количество отношений роли пользователя увеличивается, время загрузки страницы растет безумно. Я знаю, что это происходит потому, что он запускает SQL-запрос каждый раз, когда ему нужно получить список пользователей и список ролей. Есть ли способ заставить Джанго не запускать столько запросов на одну и ту же вещь?