【问题标题】:Django Crispy_forms doesn`t load the correct layoutDjango Crispy_forms 没有加载正确的布局
【发布时间】:2020-08-22 00:51:28
【问题描述】:

我花了几个小时尝试调试此错误,但找不到原因。我没有任何错误消息。

截图如下:Crispy Form Displayed

我想使用清晰的表单布局在两列中显示我的表单。

目标: 使用 forms.py 文件中定义的布局显示表单 问题: 布局未按预期显示,并在不同的行列出所有字段。这是表格ibb.co/nrwRmzT的屏幕截图

forms.py

from crispy_forms.helper import FormHelper
from .models import Project
from django.core.exceptions import ValidationError
from crispy_forms.layout import Layout, Submit, Row, Column, ButtonHolder


class ProjectForm(forms.ModelForm):
class Meta:
    model = Project
    fields = ['type','chantier','description','company','contact','po_number','display_po','upload_po','proposal_ref','budget','system','notes']   
    labels = {
        "po_number": "Client PO Ref",
        "company": "Customer"
    }

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.helper = FormHelper(self)
    self.helper.layout = Layout( 
        Row(
            Column('type', css_class='form-group col-md-2 mb-0'),
            Column('chantier', css_class='form-group col-md-2 mb-0'),
            Column('description', css_class='form-group col-md-3 mb-0'),
            Column('system', css_class='form-group col-md-2 mb-0'),                
            css_class='form-row'
        ),                
        Row(
            Column('company', css_class='form-group col-md-3 mb-0'),
            Column('contact', css_class='form-group col-md-3 mb-0'),                
            css_class='form-row'
        ),
        Row(
            Column('proposal_ref', css_class='form-group col-md-2 mb-0'),
            Column('budget', css_class='form-group col-md-5 mb-0'),                
            css_class='form-row'
        ),
        Row(
            Column('po_number', css_class='form-group col-md-2 mb-0'),
            Column('upload_po', css_class='form-group col-md-2 mb-0'),
            Column('proposal_ref', css_class='form-group col-md-2 mb-0'),                
            css_class='form-row'
        ),
        Row(
            Column('notes', css_class='form-group col-md-20 mb-0'),                             
            css_class='form-row'
        ),
        Submit('submit', 'Sign in')
    )

Createproject.html

{% extends 'base.html' %}

{% load crispy_forms_tags %}
{% crispy form %}

{% block body %}


 <form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
      {% csrf_token %}                  
      {% crispy form %}                 
 </form>

{% endblock %}

非常感谢

【问题讨论】:

    标签: django bootstrap-4 django-crispy-forms


    【解决方案1】:

    您需要将 Row() 数据分配给 helper.layout

    def __init__(self, *args, **kwargs):
        super(ProjectForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.form_method = 'POST'
    
        self.helper.layout = Layout( 
            Row(
                Column('type', css_class='form-group col-md-6 mb-0'),
        [...]
    

    在此处查找类似的示例代码: https://simpleisbetterthancomplex.com/tutorial/2018/11/28/advanced-form-rendering-with-django-crispy-forms.html#crispy-forms-layout-helpers

    【讨论】:

    • 谢谢,我已通过将 (forms.ModelForm) 替换为 (forms.Form) 来解决此问题。
    • 知道为什么布局在每个地方,我不知道为什么? ibb.co/nrwRmzT
    【解决方案2】:

    在你的 Createproject.html

    中试试这个
    <form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
          {% csrf_token %}                  
          {{ form|crispy }}                
     </form>
    

    我希望这能解决你的问题。

    【讨论】:

    • 感谢您的回复。它不会改变任何东西。
    • 您是否在项目的 settings.py 文件中像这样在 INSTALLED_APPS 中添加了“crispy_forms”:INSTALLED_APPS = [ ..., 'crispy_forms', ...]?
    • 是的,我已经做到了。并配置了 CRISPY_TEMPLATE_PACK = 'bootstrap4'。一定是碍事,我是怎么写forms.py的。
    猜你喜欢
    • 2018-02-10
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多