Django Crispy_forms не загружает правильный макет - PullRequest
0 голосов
/ 07 мая 2020

Я потратил несколько часов, пытаясь отладить эту ошибку, но не мог понять, почему. У меня нет сообщений об ошибках.

Вот скриншот: Отображается хрустящая форма

Я хотел бы отображать свою форму в двух столбцах, используя макет хрустящих форм .

Цель: Отображение форм с макетом, определенным в файле 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 %}

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Вам необходимо назначить данные 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

0 голосов
/ 07 мая 2020

Попробуйте это в своем Createproject. html

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

Надеюсь, это решит вашу проблему.

...