我正在尝试使用 forms.py 和 Crispy 在 Django 中为我的表单设置一个模板,但我在表单中设置的任何内容。最终,我现在只是想在一行中获取两个字段,并且表单模板在呈现时没有显示为格式化。我相信这可能是一个继承问题,但我不是 100% 确定。如果我采用单个对象,{{ form.phone_number|as_crispy_field }}
那么我可以使用HTML 模板<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')]