【发布时间】:2020-06-13 12:20:15
【问题描述】:
我正在尝试使用 Django 清晰表单进行格式化,但无法保存。
首先是一些代码:
forms.py
class CreateForm_test(forms.Form):
name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Name'}))
street = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Street'}))
number = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Number'}))
comment = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Comment'}))
phone = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Phone'}))
status = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Status'}))
class CrispyAddressForm(CreateForm_test):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(
Row(
Column('name', css_class='form-group col-md-6 mb-0'),
css_class='form-row'
),
'street',
'number',
Row(
Column('comment', css_class='form-group col-md-6 mb-0'),
Column('phone', css_class='form-group col-md-2 mb-0'),
Column('status', css_class='form-group col-md-2 mb-0'),
css_class='form-row'
),
Submit('submit', 'Submit')
)
views.py
class CreateRegisterView(CreateView):
model = Register
message = _("saved")
form_class = CrispyAddressForm
template_name = 'register_form.html'
def form_valid(self, form):
if self.request.user.is_authenticated:
form.instance.user = self.request.user
return super().form_valid(form)
def get_success_url(self):
messages.success(self.request, self.message)
return reverse('home')
register_form.html
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
{% crispy form %}
{% endblock %}
当我在浏览器中打开表单时,出现此错误
forms.py", line 36, in __init__
super().__init__(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'instance'
[29/Feb/2020 18:40:13] "GET /Register/create/ HTTP/1.1" 500 115893
我也试过
类 CreateRegisterView(FormView):
但后来我在这一行的视图中遇到了同样的错误form.instance.user = self.request.user
【问题讨论】:
-
您没有使用
ModelForm,因此没有instance。 -
好的,但是当我更改为 forms.ModelForm 时,我可以看到表单但它没有保存。当我点击提交按钮时,网站正在重新加载,但没有保存任何内容
-
提交表单时是否看到 POST 请求?
-
是的,当我更改为 ModelForm 时,我可以在浏览器中看到表单,但它没有保存
-
但是如果你提交表单,它应该登录到服务器控制台(不是浏览器)一个POST请求。
标签: django python-3.x python-3.7 django-crispy-forms django-2.2