#python #django #django-templates #django-crispy-forms #django-inheritance
Вопрос:
Я пытаюсь настроить шаблон для своей формы в Django, используя forms.py и хрустящие, но все, что я указываю в своих формах. В конечном счете, в данный момент я просто пытаюсь разместить два поля в одной строке, и шаблон формы не отображается в формате при отображении. Я считаю, что это может быть проблемой наследования, но я не уверен на 100%. Если я возьму отдельные объекты, такие как {{ form.phone_number|as_crispy_field }}
, я могу отформатировать их с <Div>
CSS
помощью HTML-шаблона и в нем, но это кажется ненужным.
#forms.py
from django import forms
from .models import *
from crispy_forms.helper import FormHelper
from crispy_forms.bootstrap import FormActions
from crispy_forms.layout import Submit, Layout, Row, Column, Hidden
class CustomerCreateForm(forms.Form):
customer_name = forms.CharField(max_length=100)
phone_number = forms.CharField(max_length=12)
business_address = forms.BooleanField(required=False, initial=True)
street_address_1 = forms.CharField(max_length=255)
street_address_2 = forms.CharField(max_length=255, required=False)
city = forms.CharField(max_length=100)
region = forms.ChoiceField(choices=REGIONS_OPTIONS)
postal_code = forms.CharField(help_text="Please enter in the format 'A1A1A1'", max_length=6)
country = forms.ChoiceField(choices=COUNTRY_OPTIONS)
def __init__(self, *args, **kwargs):
super(CustomerCreateForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'POST'
self.helper.attrs = {
'novalidate': ''
}
self.helper.layout = Layout(
Row(
Column('customer_name', css_class='form-group col-md-2 mb-0'),
Column('phone_number', css_class='form-group col-md-2 mb-0'),
css_class='form-row'
),
# FormActions(
# Submit('submit', 'Create Me')
# )
)
#formtest2.html
{% extends 'blog/base_no_top_navbar.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="'content-section">
<form method="POST" novalidate>
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">New Customer</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Create</button>
</div>
</form>
</div>
{% endblock content %}
class CustomerCreateView(LoginRequiredMixin, FormView):
template_name = 'ics/formtest2.html'
form_class = CustomerCreateForm
def form_valid(self, form):
customer_name = form.cleaned_data['customer_name']
phone_number = form.cleaned_data['phone_number']
business_address = form.cleaned_data['business_address']
street_address_1 = form.cleaned_data['street_address_1']
street_address_2 = form.cleaned_data['street_address_2']
city = form.cleaned_data['city']
region = form.cleaned_data['region']
postal_code = form.cleaned_data['postal_code']
country = form.cleaned_data['country']
customer = Customer.objects.create(customer_name=customer_name, phone_number=phone_number)
address = Address.objects.create(business_address=business_address, street_address_1=street_address_1,
street_address_2=street_address_2, city=city, region=region,
postal_code=postal_code, country=country)
customer.save()
address.save()
return super().form_valid(form)
def get_success_url(self):
return reverse('customer-detail', kwargs={'pk': self.object.pk})
#urls.py
urlpatterns = [
path('customer/new', CustomerCreateView.as_view(), name='customer-create')]