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

问题描述 投票:0回答:1

我正在尝试在模板中使用Crispy Forms,但无法获得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)
django django-models django-forms django-templates django-crispy-forms
1个回答
0
投票

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

{% 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 Forms不太了解,那么Crispy Forms可能会引起很多混乱。我想说的是先从Django的内置Forms开始,然后在您想做更多高级工作时变得酥脆。这里的文档应该可以帮助您:https://docs.djangoproject.com/en/3.0/topics/forms/

© www.soinside.com 2019 - 2024. All rights reserved.