Django を使用してブログ アプリを作成しており、階層的なカテゴリ構造を実装しようとしています。各カテゴリには、同じカテゴリ モデルを指す「親」の ForeignKey があります。管理者がカテゴリを追加できるようにしたいのですが、インターフェイスでカテゴリの親カテゴリを選択できるようにしたいと考えています。ただし、私は自分自身のおじいちゃんの状況を避けたいので、使用可能なカテゴリの選択肢を、祖先として問題のカテゴリを持たないカテゴリに制限したいと考えています。
現在、私はビューからこれを制御しています:
parent_candidates = list(Category.objects.all())
pruned_parent_list = [cat for cat in parent_candidates if instance.id not in cat.getHierarchy()]
ここで、instance は編集中のカテゴリで、getHierarchy() は祖先 ID のリストを取得するメソッドです。
このアプローチには多くの問題があります。特に、余分なデータベース ヒットを使用してすべてのカテゴリのリストを取得し、pruned_parent_list をループしてオプションを取得することで、選択メカニズムをテンプレートに書き込む必要があります。
これを行うより良い方法はありますか?これを防ぐためにバックエンドにカスタム検証を追加できることは知っていますが、なぜユーザーにオプションを提供するのでしょうか?