Django 和酥脆的形式,如何在酥脆的布局中添加 id 和名称



我正在尝试在我的模板中使用脆皮表单,但我无法在布局中正确呈现nameidclass。 换句话说,我有以下模板:

<div class="modal-body">
<label for="conto">Conto</label>
<input class="form-control" id="form-conto" name="formConto"/>
</div>

所以我想删除输入行并添加脆皮字段,以便在输入字段上id="form-conto" name="formConto"

我知道我必须在我的Model.forms中添加布局,但我不明白如何获得它。

这是我的表格:

class MaterialeForm(forms.ModelForm):
class Meta:
model = Materiale
fields = "__all__"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()

这是我的模型:

class Materiale(models.Model):
conto = models.ForeignKey(Conto, on_delete=models.CASCADE, null=True)

在模板顶部,加载脆皮标签:

{% load crispy_forms_tags %}

然后,告诉 Crispy 使用 Crispy 标签呈现您的表单:

<div class="modal-body">
{% crispy materialeform materialeform.helper %}
</div>

在您的forms.py中,您需要添加一个Layout

from crispy_forms import FormHelper, Layout
... 
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.layout = Layout(
Field('conta', id="form-conto", css_class="form-control", title="Conto")
)

请参阅布局:https://django-crispy-forms.readthedocs.io/en/latest/layouts.html 上的文档

然后,当对表单发出 GET 请求时,它将根据需要(或多或少(呈现。您可能需要调整一些内容。按照上面的布局文档进行操作。

但是,除非您在模板中实际传递表单,否则这些都不起作用。也许您已经在这样做了,例如,使用通用FormView,但如果没有,以下是您在视图中需要的内容:

from .forms import MaterialeForm
from django.template import RequestContext
def materialeview(request, template_name):
materialeform = MaterialeForm()
# Form handling logic
[...]
return render_to_response(template_name, {'materialeform': materialeform}, context_instance=RequestContext(request))

RequestContext,请参阅 https://docs.djangoproject.com/en/3.0/ref/templates/api/#using-requestcontext。

有关脆皮形式的更多信息,请参阅 https://django-crispy-forms.readthedocs.io/en/latest/crispy_tag_forms.html。

最后,由于Crispy Forms在后台做了很多事情,你可以考虑通过告诉它大声失败来消除混乱。将其放入您的settings.py文件中:

CRISPY_FAIL_SILENTLY = not DEBUG

顺便说一句,让我说,如果你还不太了解 Django 表单,Crispy Forms 可能会引起很多混乱。我会说先从 Django 的内置表单开始,然后在你想做更高级的事情时变得清晰。这里的文档应该会有所帮助:https://docs.djangoproject.com/en/3.0/topics/forms/。

最新更新