2013-12-23 43 views
1

这是我第一次使用Django向导表单,并且遇到了比预期更多的问题(我是新手)。我试图将一些初始数据从数据库传递给Form Wizard模板。我一直在使用谷歌搜索,但没有找到答案。将初始数据从数据库传递到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

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) 
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) 

希望这是有用的。

相关问题