0

我正在尝试使用 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')]
4

0 回答 0