私は企業にサービスを提供しています(多対多はService
とCompany
の間)。私のサービスを構造化するために、私はDjangoの多対多フィールドを使って木のような構造を使います。したがって、サービスには複数の他のサービスを含めることができます。非対称の多対多のDjangoの同じモデルへの再帰的クエリ
質問:会社が持つすべてのサービスを取得するにはどうすればよいですか? company.services
を使用して、私はその会社に直接関連するサービスを取得するだけです。私は直接関係するもの+ included_services(再帰的な方法で)が必要です。
class Company(models.Model):
services = models.ManyToManyField(Service)
class Service(models.Model):
name = models.CharField(max_length=255)
included_services = models.ManyToManyField("self", blank=True, symmetrical=False)
これは素晴らしいです、ありがとうございます!再帰的な解決策がありましたが、この幅優先探索は読みやすいアプローチです。 –
このアプローチでは、サービスグラフにサイクルを導入しないように注意する必要があります。そうしないと、無限ループで実行されます。 – knbk