3

ListとCreateをジェネリッククラスビューと機能的に組み合わせる最も簡単な方法を探しています。
アイテムリストと、下部に新しいアイテムを追加するためのフォームがあるページが欲しいのですが。

ミックスインアーキテクチャで必要なクラスを組み合わせることができると思いましたが、まだ運がありませんでした。

これはほとんど機能します:

class ResourceListView(ListView, BaseCreateView):
    context_object_name = 'resources'
    model = Resource
    form_class = ResourceForm

ただしform、テンプレート内ではアクセスできず、無効な出力でクラッシュします(フォームが有効な場合は問題ありません)。
これは多重継承に関係しているかもしれませんが、私はまだPythonにあまり興味がないので、混乱しすぎます。

いくつかのミックスインをビューと作成ビューに組み合わせる簡単な方法はありますか、それとも自分でロールアウトする必要がありますか?

4

1 に答える 1

6

注:これははるかにクリーンなソリューションであるため、私はもはやこのソリューションを推奨していません。

試行錯誤によって(そしてDjangoソースを見て)、私はこれを書きました:

class ListCreateView(ListView, BaseCreateView):
    def get_context_data(self, **kwargs):
        self.object = None
        self.object_list = self.get_queryset()

        form_class = self.get_form_class()
        form = self.get_form(form_class)

        kwargs.update({'object_list': self.object_list, 'form': form})

        context = super(ListCreateView, self).get_context_data(**kwargs)
        return context

作成と一覧表示の両方で正常に機能します(ただし、追加のデータベース呼び出しがいくつか発行される場合がありますが、確かではありません)。

于 2011-09-29T02:18:17.373 に答える