这真让我难过。我可以在django中写好表格,但想使用crispy-forms bootstrap3。我可以使用此表单代码获取要呈现的表单:
类NewGuestForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NewGuestForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_id = 'id-newGuestForm'
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-lg-2'
self.helper.field_class = 'col-lg-6'
self.helper.form_method = 'post'
self.helper.form_action = 'guest-list'
self.helper.layout = Layout(
Fieldset (
'New Guest',
'first_name',
'last_name',
'num_child',
'landline',
'mobile',
'email'
),
FormActions(
Submit('save', 'Save changes',css_class='btn-primary'),
Button('cancel', 'Cancel')
)
)
class Meta:
model = Guest
class BookingForm(forms.Form): 类Meta: model =预订
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_method = 'POST'
self.helper.form_id = 'add-booking'
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-lg-2'
self.helper.field_class = 'col-lg-6'
self.helper.layout = Layout(
Fieldset(
'',
'guest',
'guest_status',
'start_date',
'end_date',
'dep_recd',
'bkd_child',
'bkd_adult',
'bal_recd',
'sec_recd',
'keys_sent',
'sec_retn',
'notes'
),
FormActions(
Submit('submit', "Save changes"),
Submit('cancel', "Cancel"),
)
)
super(BookingForm, self).__init__(*args, **kwargs)
这会将表单呈现为OK,但是当我点击“提交”时,浏览器会变为白色。返回(form_action)正确显示在地址栏中,但未加载。数据不会写入数据库。表单只显示我需要的字段。
我的观点是:
class NewGuestView(CreateView):
model = Guest
template_name = 'new_guest.html'
form_class = NewGuestForm
如果我将'form_class'更改为'form',表单将呈现所有字段并忽略引导列指令。此外,“提交”和“取消”按钮也不会出现。
我必须做错事,但不能为我的生活看到什么。感激地收到任何建议。答案 0 :(得分:1)
这对你来说可能有点晚了,但我今天第一次看到django-crispy-forms并遇到了和你一样的问题。如果我已定义form_action
,则在提交表单后,浏览器将重定向到正确的URL,但页面为空白 - 即使刷新也是如此。无论表单是否有效,也会发生这种情况,所以很明显这是一个非常基本的问题,并且必定存在我们都做错的事情。
我通过使用视图的success_url
属性解决了这个问题。所以你可以试过:
from django.core.urlresolvers import reverse_lazy
class NewGuestView(CreateView):
...
success_url = reverse_lazy("guest-list")
至于按钮,我还没有定义布局并使用了这种方法:
self.helper.add_input(Submit('submit', 'Submit'))
self.helper.add_input(Button('cancel', 'Cancel'))
虽然值得注意的是'取消'按钮实际上并没有在这个阶段做任何事情,我还需要进一步研究。
你有没有设法让这个工作或找到另一种方法?
<强>更新强>
重定向失败,出现405 Method Not Allowed
错误。我尝试按照this SO question在我的视图中定义post()方法,这解决了HTTP错误,但没有处理数据(没有保存新记录,也没有捕获验证错误) )。所以我一直坚持使用success_url方法,直到找到我做错的事情为止。
答案 1 :(得分:1)
现在解决了。我没有意识到我需要将字段添加到Meta类以及在Layout中列出它们。我添加了以下
class Meta:
model = Guest
fields = ['first_name', 'last_name', 'email', 'landline', 'mobile']
现在表格保存好了。