Ess*_*eTi 20 django django-models django-forms django-crispy-forms
我一直在以脆弱的形式运行,它似乎完全符合我的要求:使用引导程序布局渲染表单.
现在,这个例子谈论使用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)
Run Code Online (Sandbox Code Playgroud)
但是,如何进行更新?因为如果我把它放在视图中:
form = TemplateCreateForm(request.POST or None, instance=template)
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为实例仅适用于ModelForm.
现在,我可以用forms.Form
with 替换ModelForm
并使用Crispy形式的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')
Run Code Online (Sandbox Code Playgroud)
在这里我添加了Meta类.现在:它有效,但是这样使用它是否正确?更新也以这种方式工作.
使用表单进行更新的正确方法是什么?
mar*_*jop 53
我是django-crispy-forms的首席开发人员.我不确定我是否按照您的问题进行操作,因为格式有点差.你究竟想做什么?
django-crispy-forms可以与ModelForms一起使用,就像使用简单表单一样.它位于Django之上,所以它不会弄乱它.它仅控制表单呈现,但不会更改验证的工作方式,如何创建表单实例等.
编辑:
我正在添加一个关于如何ModelForm
使用crispy-forms 的示例.
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
Run Code Online (Sandbox Code Playgroud)
我相信你的第一个问题是你是子类forms.Form
而不是forms.ModelForm
.这就是为什么我说你的问题与Django相关,而不是与脆皮形式有关.
稍后在您看来:
form = ExampleModelForm()
Run Code Online (Sandbox Code Playgroud)
在您的模板中:
{% load crispy_forms_tags %}
{% crispy form %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16627 次 |
最近记录: |