我正在尝试创建一个相当简单的表格,该表格将允许我从数据库中更新和删除乐器。除HTML渲染外,其他所有东西都在工作,为此,我正在使用django-crispy-forms。
如果我想要的只是一个Submit按钮,下面的代码将非常有效:
forms.py
class InstrumentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(InstrumentForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
# Add a submit button after all of my fields are auto generated in the form.
self.helper.add_input(Submit('submit', 'Submit'))
class Meta:
model = Instrument
views.py
class InstrumentDetailView(generic.UpdateView):
template_name = 'instrument/details.html'
form_class = InstrumentForm
# FIXME Don't hardcode the URL
success_url = '/inventory/instruments'
model = Instrument
instrument / details.html
{% extends "shared/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<h1>Instrument Details</h1>
{% crispy form %}
{% endblock %}
通过这种配置,我看到了我的Instrument模型中的所有字段都可以通过一个有效的Submit按钮完美呈现。
问题是我要在该“提交”按钮旁边呈现一个“删除”链接。我尝试了以下方法:
forms.py
class InstrumentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(InstrumentForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
# Add a submit button after all of my fields are auto generated in the form.
self.helper.add_input(Submit('submit', 'Submit'))
self.helper.add_input(HTML('<a href=foo>foo</a>'))
class Meta:
model = Instrument
但是这只是呈现一个看起来像这样的按钮:
<input name="" value="" class="" id="-id-" type="">
所以看起来add_input
仅适用于按钮。然后,我尝试了以下操作:
forms.py
class InstrumentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(InstrumentForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
button_layout = Layout(
ButtonHolder(
Submit('submit', 'Submit'),
HTML('<a href="foo">foo</a>')
),
)
self.helper.add_layout(button_layout)
class Meta:
model = Instrument
这实际上确实呈现了我的按钮并正确链接,但是其他所有字段都消失了。我当然可以通过手动指定InstrumentForm类中的所有字段来解决此问题,但我希望避免重复代码。
有人知道使用django-crispy-form来自动提交表单并自动提交表单的方法吗?我想念什么?
我正在尝试创建一个相当简单的表格,该表格将允许我从数据库中更新和删除乐器。除了HTML渲染外,其他所有东西都在工作,为此,我正在使用django-crispy -...forms.py
文件以使它与Twitter引导程序一起使用的结果:class InstrumentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(InstrumentForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.add_input(Submit('submit', 'Submit'))
self.helper.add_input(Button('delete', 'Delete', onclick='window.location.href="{}"'.format('delete')))
class Meta:
model = Instrument