1

Django Wizard Form を使用するのはこれが初めてで、予想以上に多くの問題が発生しています (私は初心者です)。データベースからフォーム ウィザード テンプレートに初期データを渡そうとしています。私はグーグルで検索しましたが、答えが見つかりませんでした。

データベースにクエリを実行し、辞書を作成して返すには get_context_data メソッドをオーバーライドする必要があると思いますが、それについてはよくわかりません。誰かが私に正しいプロセスを説明してもらえますか?

私のアイデアを示すために、以下にコードを示します。

def my_function(request):
    form = MyWizard.as_view([Form1, Form2, Form3])
    return form(context=RequestContext(request), request=request)

TEMPLATES = {'0': "form1.html",
             '1': "form2.html",
             '2': "form3.html",}

class MyWizard(SessionWizardView):

    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def get_context_data(self, form, **kwargs):
        if self.steps.current == 0:

            list = MyModel.objects.all()   # query my database

            # convert list to dict

            return context   # return context with the dict

    def done(self, form_list, **kwargs):
        form_data = process_form_data(self.request, form_list)

        return render_to_response('process-completed.html', {'form_data': form_data,})

ありがとうございました。

4

2 に答える 2

2

この例では、初期データをウィザードに渡す方法を指定します。

あなたの場合、より複雑な処理が必要なため、get_form_initial()メソッドをオーバーライドする必要があります。

def get_form_initial(self, step):
    initial = {}
    if step == 1:
        client_pk = self.kwargs.get('client_pk')
        initial.update({
            'client': Client.objects.get(pk=client_pk)
        })
    return self.initial_dict.get(step, initial)
于 2013-12-23T18:39:58.057 に答える
1

どうもありがとうございました!!あなたのコードに基づいて問題をどのように解決したかを示すために、以下にコードを書きます。

def get_form_initial(self, step):
    initial = {}
    if step == '0':
        t = MyModel.objects.all() # Get the list of objects of my database
        initial = {x.id: x.name for x in t} # Convert this list to python dictionary
    return self.initial_dict.get(step, initial)

これが役に立つことを願っています。

于 2013-12-25T19:41:56.837 に答える