将初始数据从数据库传递到Django Form Wizard模板

时间:2013-12-23 18:30:15

标签: python database django templates formwizard

这是我第一次使用Django向导表格而且我遇到的问题比预期的多(我是新手)。我正在尝试将一些初始数据从数据库传递到表单向导模板。我一直在谷歌搜索,但我没有找到答案。

我认为我必须覆盖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,})

谢谢。

2 个答案:

答案 0 :(得分:2)

This example指定如何将初始数据传递给向导。

在您的情况下,您需要更复杂的处理,因此您应该覆盖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)

答案 1 :(得分:0)

非常感谢!!我在下面编写代码,以显示我是如何根据您的代码解决问题的。

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)

希望这很有用。