2015-12-26 46 views
1

此視圖不發送表單。我不知道爲什麼。我可以看到它沒有發送表單,因爲我在get_context_data函數的末尾打印了contextDjango CreateView不發送表格

class CrearFeralSpirit(CreateView): 

    template_name = "hisoka/crear_feral_spirit.html" 
    model = FeralSpirit 
    fields = ['tipo', 'nombre', 'url'] 

    def form_valid(self, form): 

     fireball = Fireball.objects.get(slug=self.kwargs.get('slug')) 
     form.instance.fireball = fireball 

     return super(CrearFeralSpirit, self).form_valid(form) 

    def get_context_data(self, *args, **kwargs): 
     context = super(CrearFeralSpirit, self).get_context_data() 
     fireball = Fireball.objects.get(slug=self.kwargs['slug_fireball']) 

     context['fireball'] = fireball 
     print context # Here I print the context, no form in it. 
     return context 
+1

當你調用'super'時,你不應該將'* args'和'* kwargs'傳遞給父類嗎? 'context = super(CrearFeralSpirit,self).get_context_data(* args,** kwargs)' –

+0

真的,謝謝,那有效。如果你想要你可以寫出答案,我會接受它。另外....我不明白它爲什麼會起作用,當我調用'super'時,它調用沒有'args'和'kwargs'的'get_context_data',但爲什麼它需要'args'和'kwargs 「首先呢?是不是已經存在的「形式」?在什麼時候,'form'被添加到'context'中......我很困惑。 :P – alejoss

+1

我更新了答案。我無法檢查django是否完全使用這些參數,我可能會在稍後訪問某些內容時更新我的​​答案。 –

回答

1

正如我放在評論,你忘了通過*args**kwargs父類,當你調用super,所以它應該是:

context = super(CrearFeralSpirit, self).get_context_data(*args, **kwargs) 

*args**kwargs是通過定義的參數django get_context_data它們絕對用在django裏面。如果你沒有把它們傳遞給父類,django缺乏某些需要的信息。沒有他們,django無法構建表單,因此你的上下文沒有任何形式。