0

選択したオブジェクトに変更が加えられる前に (管理者以外で)、確認ページを作成したいと考えています。オブジェクトは異なるモデルにすることができます (ただし、一度に 1 つのモデルのみ)。

これは、削除前に管理者が行っていることとよく似ています。しかし、管理コードは複雑で、そこでどのように行われるかを把握していません。

最初に、オブジェクトを異なる方法でフィルタリングするいくつかのフォームを用意してから、クエリセットをアクション/確認ページに渡します。モデルに応じて異なるクエリセットを定義できるように、フォーム ファクトリを作成しました (Stackoverflow の別の同様の質問に見られるように)。

def action_factory(queryset):
    ''' Form factory that returns a form that allows user to change status on commissions (sale, lead or click)
    '''
    class _ActionForm(forms.Form):
        items = forms.ModelMultipleChoiceField(queryset = queryset, widget=forms.HiddenInput())
        actions = forms.ChoiceField(choices=(('A', 'Approve'), ('D' ,'Deny'), ('W' ,'Under review'), ('C' ,'Closed')))
    return _ActionForm

私の見解で使用するもの:

context['form']=action_factory(queryset)()

問題は、項目フィールドが非表示の場合、html コードにまったく表示されないことです。HiddenInput ウィジェットを削除すると、フォームが正しく表示されます。

何千ものオブジェクトが存在する可能性があるため、選択フィールドを表示したくありません。私が欲しいのは、「1000 個のオブジェクトのステータスを変更しますか」のようなものと、ポップダウンと送信ボタンだけです。単純な問題のようですが、うまくいきません。

誰かが私の現在の試みに対する解決策を持っている場合、彼らがそれをどのように行ったかを聞いてうれしいです. よりクリーンでより良い解決策があれば、さらに良いでしょう。

4

1 に答える 1

0

間違ったウィジェットを使用しました。HiddenInput ではなく MultipleHiddenInput である必要があります。

于 2011-07-13T08:54:20.023 に答える