djangoは、クラスベースビュー(ListView)でフォームセットをレンダリングおよび検証します

マティアス

フォームセットをレンダリングし、postメソッドを介して送信されたときにフォームセットを検証するために使用する次のクラスベースのビューがあります。

フォームセットは完全にレンダリングされます。フォームを送信すると、フォームセットを読み取ってエラーがないか確認できます。このクラスのpostメソッドで->errors = backorder_formset.errors

フォームセットにエラーが見つかった場合は、ビューをレンダリングしたいのですが、今回は、POSTから読み取ったフォームセットインスタンスを使用します。ctx = self.get_context_data()クラスのpostメソッド内でformを呼び出すと、呼び出しから次のエラーが発生しますsuper(MissingProductsListView, self).get_context_data(*args, **kwargs)'MissingProductsListView' object has no attribute 'object_list'

Listviewのスーパークラスがこの呼び出しを実行しているようです。queryset = kwargs.pop('object_list', self.object_list)

私の質問は、なぜこのエラーで実行されているのですか?また、このフォームセットをエラーメッセージとともにレンダリングして、投稿後にテンプレートに表示するにはどうすればよいですか?Django1.9.9を使用しています

class MissingProductsListView(generic.ListView):
    template_name = 'dashboard/purchaseorder/missing_products.html'
    context_object_name = 'backorders'
    model = BackOrder

    def post(self, request, *args, **kwargs):
        backorder_formset = BackOrderFormset(request.POST)
        errors = backorder_formset.errors

        if backorder_formset.is_valid():
            # <process form cleaned data>
            return HttpResponseRedirect('/success/')
        else:
            ctx = self.get_context_data()
            return self.render_to_response(ctx)


    def accumulate_identical_products_from_backorders(self, back_order_list):
        ... some code
        return sorted_accumulated_dict.values()

    def get_context_data(self, *args, **kwargs):
        ctx = super(MissingProductsListView, self).get_context_data(*args, **kwargs)
        ctx['title'] = _("Missing Products")
        if self.request.POST:
            ctx['back_order_formset'] = BackOrderFormset(self.request.POST)
        else:
            accumulated_backorders_per_product = self.accumulate_identical_products_from_backorders(BackOrder.objects.all())

            back_orders = BackOrderFormset(initial=[{'product_id': backorder_dict['product_id'],
                                                     'product': backorder_dict['title'],
                                                     'quantity': backorder_dict['quantity']} for backorder_dict in
                                                    accumulated_backorders_per_product])
            ctx['back_order_formset'] = back_orders
        return ctx

    def get_queryset(self):
      .. some code
        return backorder_list
opalczynski

ここを見て:

class BaseListView(MultipleObjectMixin, View):
    """
    A base view for displaying a list of objects.
    """
    def get(self, request, *args, **kwargs):
        self.object_list = self.get_queryset()
        allow_empty = self.get_allow_empty()

        if not allow_empty:
            # When pagination is enabled and object_list is a queryset,
            # it's better to do a cheap query than to load the unpaginated
            # queryset in memory.
            if self.get_paginate_by(self.object_list) is not None and hasattr(self.object_list, 'exists'):
                is_empty = not self.object_list.exists()
            else:
                is_empty = len(self.object_list) == 0
            if is_empty:
                raise Http404(_("Empty list and '%(class_name)s.allow_empty' is False.") % {
                    'class_name': self.__class__.__name__,
                })
        context = self.get_context_data()
        return self.render_to_response(context)

基本的に-POSTハンドラーでこの部分を見逃しました:

self.object_list = self.get_queryset()

そして正直に言うと、これがdjangoの汎用ListViewに投稿を追加するのに良いアイデアかどうかはよくわかりません。FormViewのように見えますが、ここでは間違っている可能性があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

カスタムDjangoフォームバリデーターはフロントエンドで検証エラーをレンダリングしません

Djangoはクラスベースのビューでフォームをレンダリングできません

クラスベースのビューでフォームをレンダリングする方法?

クラスベースのフォームをレンダリングしないdjangoクラスベースのビュー

Angular 6フォームは、送信およびリセット後に検証エラーを返します

RMSEおよびMAEパフォーマンスメトリックを使用してランダムフォレスト(スケーリングなし)とLSTM(スケーリングあり)を比較する方法

クラスベースビューを使用して、別のアプリからdjangoでテンプレートをレンダリングする方法は?

djangoフレームワーククラスベースのビューでログインしたユーザーに属するトランザクションの売上のみを表示するようにフィルタリングする方法

CloudKit-パブリックおよびプライベートデータベース-メッセージングプラットフォーム

SharePoint:フォルダーおよびドキュメントセットに対するプログラムによるコピー/移動操作は、アトミックであることが保証されていますか?

Laravel 5.6は、デフォルトのビューパスではなくカスタムパスからメールをレンダリングします

Android-androidTestおよびtestフォルダー内のインストルメントされたテストおよびユニットテストクラスにプログラムでアクセスすることは可能ですか?

Rマークダウンを使用して、テキスト、ヘッダー、およびリストをプログラムで挿入します

ベーステンプレートのDjangoフォーム。検証エラーを表示する方法は?

Djangoは、クリスピーフォームを使用してcssでフォームフィールドをレンダリングします

Djangoクラスベースのビュー-クエリセットをフィルタリングして保存します

ビジネスロジックレイヤーでシングルトンおよび/またはファクトリパターンを使用する方法

クラスベースビューでのDjangoフォームの検証

コントローラーのアクションとビューは、phpフレームワークの単一のエントリスクリプトを介してどのようにレンダリングされますか?

JSP検証およびリダイレクト:フォーム入力を検証し、エラーを元のページに転送する方法

クリックアイコンのフラッターリストビュービルダーは、更新数量テキストフィールドを追加および削除します

私のコードは、リサイクラービューのクラスフラグメントを膨らませるエラーを示しています。これは私のコード、アダプタクラス、および使用したすべてのxmlファイルです

Symfony2ajaxフォーム検証は小枝のエラーをレンダリングします

プログラムでdevExtremeリスト検索ボックスに値を入力し、通常どおりリストをフィルタリングするイベントをトリガーするにはどうすればよいですか?

プログラムされた(ポーリングされた)I / O、割り込み駆動型I / O、およびダイレクトメモリアクセスの違いは何ですか。I / O OSのこれらのフォームは、依存していますか?

Django:すでにログインしているユーザーをクラスベースのビューでリダイレクトする

ボタンをクリックして編集テキストにフォーカスをプログラムで設定および削除する方法

(クリック)および(フォーカス)イベントのマットダイアログを開く

ARM Linuxは、PTEのダーティ、アクセス、およびファイルビットをどのようにエミュレートしますか?

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ