ユーザー、プロジェクト、ロールの 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クエリを実行するため、これが発生することはわかっています。Django が同じことに対してこれほど多くのクエリを実行しないようにする方法はありますか?