Django - 脆皮形式不显示
Django - crispy form not showing
我正在尝试呈现此表单:
class LoadForm(forms.Form):
class Meta:
model = Load
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
Row(
'whouse',
'supplier',
'company',
'product',
'quantity',
'unit_price',
'load_date',
)
)
具有以下观点:
def load(request):
form = LoadForm()
context = {
'form': form,
'title': 'Nuovo Carico',
}
return render(request, 'warehouse/load.html', context)
和以下模板:
{% extends "masterpage.html" %}
{% load static %}
{% block headTitle %}
<title>{{title}}</title>
{% endblock %}
{% block contentHead %}
{% endblock %}
{% block contentBody %}
{% load document_tags %}
{% load custom_tags %}
{% load crispy_forms_tags %}
<FORM method="POST" autocomplete="off">
{{ form.media }}
{% csrf_token %}
<div class="alert alert-info">
{{ title }}
</div>
{% crispy form %}
<input type="submit" class="btn btn-primary margin-left" value="CARICA">
</FORM>
{% endblock %}
由于某些奇怪的原因,表单不会显示,我只看到标题和输入按钮。我试过非常简单的form.as_p,没有脆皮,但还是没有...
通过查看浏览器上的源代码,我看到有一个 div 和 class 'form-row' 但不是其中的形式...
看起来很奇怪。
有什么帮助吗?
非常感谢。
卡罗
您的表单 class 定义如下: class LoadForm(forms.Form):
请注意,这里是 Form
而不是 ModelForm
因此使用 Meta
class 和指定 model
没有区别。相反,您想使用 ModelForm
[Django docs] 并且还需要在 Meta
:
中指定 fields
或 exclude
class LoadForm(forms.<b>ModelForm</b>): # `ModelForm` here
class Meta:
model = Load
<b>fields = '__all__'</b> # All fields
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
Row(
'whouse',
'supplier',
'company',
'product',
'quantity',
'unit_price',
'load_date',
)
)
像这样在模板中调用表单。首先是您在上下文中拥有的表单的名称加上 pipe crispy。对我有用。
</div>
{{form|crispy}}
<input type="submit" class="btn btn-primary margin-left" value="CARICA">
我正在尝试呈现此表单:
class LoadForm(forms.Form):
class Meta:
model = Load
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
Row(
'whouse',
'supplier',
'company',
'product',
'quantity',
'unit_price',
'load_date',
)
)
具有以下观点:
def load(request):
form = LoadForm()
context = {
'form': form,
'title': 'Nuovo Carico',
}
return render(request, 'warehouse/load.html', context)
和以下模板:
{% extends "masterpage.html" %}
{% load static %}
{% block headTitle %}
<title>{{title}}</title>
{% endblock %}
{% block contentHead %}
{% endblock %}
{% block contentBody %}
{% load document_tags %}
{% load custom_tags %}
{% load crispy_forms_tags %}
<FORM method="POST" autocomplete="off">
{{ form.media }}
{% csrf_token %}
<div class="alert alert-info">
{{ title }}
</div>
{% crispy form %}
<input type="submit" class="btn btn-primary margin-left" value="CARICA">
</FORM>
{% endblock %}
由于某些奇怪的原因,表单不会显示,我只看到标题和输入按钮。我试过非常简单的form.as_p,没有脆皮,但还是没有...
通过查看浏览器上的源代码,我看到有一个 div 和 class 'form-row' 但不是其中的形式...
看起来很奇怪。
有什么帮助吗?
非常感谢。
卡罗
您的表单 class 定义如下: class LoadForm(forms.Form):
请注意,这里是 Form
而不是 ModelForm
因此使用 Meta
class 和指定 model
没有区别。相反,您想使用 ModelForm
[Django docs] 并且还需要在 Meta
:
fields
或 exclude
class LoadForm(forms.<b>ModelForm</b>): # `ModelForm` here
class Meta:
model = Load
<b>fields = '__all__'</b> # All fields
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
Row(
'whouse',
'supplier',
'company',
'product',
'quantity',
'unit_price',
'load_date',
)
)
像这样在模板中调用表单。首先是您在上下文中拥有的表单的名称加上 pipe crispy。对我有用。
</div>
{{form|crispy}}
<input type="submit" class="btn btn-primary margin-left" value="CARICA">