0

複数のChartモデルで構成されるモデルがありますBox(したがってBox、への外部キーがありますChart)。Boxモデルには、 内の順序を定義するフィールドがnumberありChartます。

Boxこれで、内容を返すメソッドが作成されます。内容は、前のボックスと次のボックス (存在する場合) のプロパティによって異なります。したがって、モデルから、先行する および今後のBoxへの参照が必要です。BoxBox

これで、次の 2 つのオプションが表示されます。

  • previous と next の外部キーを作成しますBox
  • ボックスChartを求めるnumber = (current box number -1 or +1)

これを行う最も効率的な方法とその理由は何ですか? Foreignkey メソッドを使用すると、追加のクエリが実行されるか、またはこの接続が自動的に作成されますか? もちろんselect_related、完全な を取得するにはクエリセットで使用する必要がありますChart。そして、どのオプションが最もスケーラブルだと思いますか?

もちろん、これをテストできることはわかっていますが、他の人がこれについてどう思うか、私が気付いていない他の解決策があるかどうか疑問に思っています.

4

1 に答える 1

1

Box考えられる解決策は、モデル内の次の方法です。

def get_ordering(self):
   try:
       top = Box.models.filter(number__lt=self.number).order_by('-number')[0]
   except IndexError:
       top = None

   try:
       bottom = Box.models.filter(number__gt=self.number).order_by('number')[0]
   except IndexError:
       top = None

   return top,bottom

ただし、より良い解決策はdjango-mptt、django のツリー トラバーサルの実装を使用することです。

于 2013-08-09T08:20:44.543 に答える