1

Django のクラス ベースのビュー (非常に新しい)、特に ListView を理解しようとしています。「ビジネスロジックがどこに行くべきか」を理解するのに苦労しています。たとえば、次のクラスがあるとします。

#views.py
class DisplayListView(ListView):
    model = Cars
    template_name = "searchres_list.html"
    paginate_by = '5'
    context_object_name = "titles"

def get_context_data(self, **kwargs):
    context = super(SearchDisplayListView, self).get_context_data(**kwargs)
            # custom logic whoch spits out "now". in this example [1 -->10]
    context['now'] = [1,2,3,4,5,6,7,8,9,10]
    return context

それは正常に動作し、テンプレートで [1 --> 10] を見ることができます。ただし、ListViewで使用可能なメソッドを見ると、おそらく get_queryset メソッドにロジックを含めることができることがわかります。したがって、次のようなものです:

def get_queryset(self):
    # Fetch the queryset from the parent get_queryset
    queryset = super(SearchDisplayListView, self).get_queryset()
             # custom logic whoch spits out "now". in this example [1 -->10]
    queryset = [1,2,3,4,5,6,7,8,9,10]
            return queryset

だから、私のむしろ(ばかげた)質問は(または、これをすべて完全に間違っているのでしょうか!)、ビジネスロジックは理想的にはどこに行くべきですか:

  1. def get_context_data
  2. def get_queryset

御時間ありがとうございます。

4

1 に答える 1

3

おそらく、このような主観的な質問に対する最良の答えは、「場合による」でしょう。

このような状況に対処するための私の個人的なアルゴリズムは次のとおりです。

  • テンプレートに渡されるコンテキストに何かを追加する必要がある場合、 get_querysetメソッドでは ListView のクエリセットしか変更できないため、実際には選択肢がありません。したがって、この場合は get_context_data を使用します。
  • しかし、動的なクエリセットの変更を実行する場合ビューが同様のモデル クラスで動作し、実際のクラスがビューに渡された引数によって決定されるとします。おそらく、get_querysetメソッドを上書きする必要があります。

このトピックについていくつかの洞察を提供できたことを願っています:)

于 2013-02-14T21:45:10.190 に答える