2012-10-27 95 views
16

我一直在運行到crispy form,它似乎正是我想要的:使用引導佈局呈現表單。使用ModelForm的脆皮形式

現在,該示例討論使用forms.Form。這是好的,我可以通過編寫這樣的代碼來創建我的代碼:

class TemplateCreateForm(forms.Form): 
    title = forms.CharField(label=(u'Task name')) 
    description = forms.CharField(label=(u'Task description')) 
    url_start = forms.CharField(label=(u'Start page url')) 
    url_end = forms.CharField(label=(u'Final page url')) 

    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_method = 'post' 
     self.helper.add_input(Submit('submit', 'Submit')) 
     super(TemplateCreateForm, self).__init__(*args, **kwargs) 

但是,如何更新?因爲如果我把這個觀點:

form = TemplateCreateForm(request.POST or None, instance=template) 

這是行不通的,因爲實例僅用於的ModelForm。

現在,我可以替代model.FormModelForm和使用香脆形式的ModelForm? 我做了這個

class TemplateCreateForm(ModelForm): 
    title = forms.CharField(label=(u'Task name')) 
    description = forms.CharField(label=(u'Task description')) 
    url_start = forms.CharField(label=(u'Start page url')) 
    url_end = forms.CharField(label=(u'Final page url')) 

    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_method = 'post' 
     self.helper.add_input(Submit('submit', 'Submit')) 
     super(TemplateCreateForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = Template 
     exclude = ('user') 

這裏我添加了Meta類。 現在:它的工作原理,但是像這樣使用它是正確的嗎? 更新也以這種方式工作。

什麼是使用表單進行更新的正確方法?

回答

42

我是django-crispy-forms的首席開發人員。我不確定我是否按照你的問題,因爲它有點格式不好。你究竟想要做什麼?

django-crispy-forms與ModelForms一起工作,與簡單形式一樣。它位於Django之上,因此它不會混淆它。它僅控制表單呈現,但不會更改驗證的工作方式,如何創建表單實例等。

編輯:

我添加了如何做脆皮形成一個ModelForm的例子。

class ExampleModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(ExampleModelForm, self).__init__(*args, **kwargs) 

     # If you pass FormHelper constructor a form instance 
     # It builds a default layout with all its fields 
     self.helper = FormHelper(self) 

     # You can dynamically adjust your layout 
     self.helper.layout.append(Submit('save', 'save')) 

    class Meta: 
     model = ExampleModel 

我相信你的第一個問題是,你是子類forms.Form而不是forms.ModelForm。這就是爲什麼我說你的問題與Django有關,而不是脆皮形式相關。

後來在自己的看法:

form = ExampleModelForm() 

在模板:

{% load crispy_forms_tags %} 
{% crispy form %} 
+0

做什麼我做與的ModelForm使用它呢? – EsseTi

+0

我編輯了答案。 – maraujop

+0

@maraujop:請看看這個問題:http://stackoverflow.com/questions/16581057/formhelper-object-has-no-attribute-append-while-using-crispy-forms-in-django 這當我在做這裏所說的話時,問題就出現了。 –