首页 > 解决方案 > Django Forms(带有酥脆的表格)-我是否过于复杂了?有没有更简单的方法?

问题描述

我已经在 Django 中使用清晰的表单创建了一个表单,它工作正常,但我可以通过查看它来判断我很可能过度设计了它。这是很多非常相似的代码。

我应该怎么做?我想有一个更好的方法。

class New_Contact(forms.Form):

    title = forms.CharField(label=False, max_length=10,required=False)
    givenName = forms.CharField(label=False, max_length=255)
    middleName = forms.CharField(label=False, max_length=255,required=False)
    surname = forms.CharField(label=False, max_length=255)
    jobTitle = forms.CharField(label=False, max_length=255,required=False)
    companyName = forms.CharField(label=False, max_length=255,required=False)
    department = forms.CharField(label=False, max_length=255,required=False)
    businessHomePage = forms.CharField(label=False, max_length=255,required=False)
    assistantName = forms.CharField(label=False, max_length=255,required=False)
    homePhones = forms.CharField(label=False, max_length=255,required=False) # phones
    mobilePhone = forms.CharField(label=False, max_length=255,required=False) # phones
    businessPhones1 = forms.CharField(label=False, max_length=255,required=False) # phones
    businessPhones2 = forms.CharField(label=False, max_length=255,required=False) # phones
    homeAddress = forms.CharField(label=False,required=False,widget=forms.Textarea(attrs={'style': 'height: 8em'})) # addresses
    businessAddress = forms.CharField(label=False,required=False,widget=forms.Textarea(attrs={'style': 'height: 8em'})) # addresses
    emailAddresses1 = forms.CharField(label=False, max_length=255,required=False) # mail
    emailAddresses2 = forms.CharField(label=False, max_length=255,required=False) # mail

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.fields['title'].widget.attrs['placeholder'] = 'Title'
        self.fields['givenName'].widget.attrs['placeholder'] = 'First Name'
        self.fields['middleName'].widget.attrs['placeholder'] = 'Middle Name'
        self.fields['surname'].widget.attrs['placeholder'] = 'Last Name'
        self.fields['mobilePhone'].widget.attrs['placeholder'] = 'Mobile'
        self.fields['homePhones'].widget.attrs['placeholder'] = 'Home Phone'
        self.fields['emailAddresses1'].widget.attrs['placeholder'] = 'Email'
        self.fields['emailAddresses2'].widget.attrs['placeholder'] = 'Email'
        self.fields['homeAddress'].widget.attrs['placeholder'] = 'Address'
        self.fields['companyName'].widget.attrs['placeholder'] = 'Company Name'
        self.fields['department'].widget.attrs['placeholder'] = 'Department'
        self.fields['jobTitle'].widget.attrs['placeholder'] = 'Job Title'
        self.fields['assistantName'].widget.attrs['placeholder'] = 'Assistant Name'
        self.fields['businessHomePage'].widget.attrs['placeholder'] = 'Website'
        self.fields['businessPhones1'].widget.attrs['placeholder'] = 'Phone'
        self.fields['businessPhones2'].widget.attrs['placeholder'] = 'Phone'
        self.fields['businessAddress'].widget.attrs['placeholder'] = 'Address'
        self.helper.layout = Layout(
            HTML("""
                <h3 class="py-2">Personal Details</h3>           
                """),
            Row(
                Field('title', wrapper_class='col-sm-3'),
                Field('givenName', wrapper_class='col-sm-5'),
                Field('middleName', wrapper_class='col-sm-4'),
                Field('surname', wrapper_class='col-sm-12'),
                Field('mobilePhone', wrapper_class='col-sm-6'),
                Field('homePhones', wrapper_class='col-sm-6'),
                Field('emailAddresses1', wrapper_class='col-sm-12'),
                Field('homeAddress', wrapper_class='col-sm-12'),
                ),
            HTML("""
                <h3 class="py-2">Company Details</h3>           
                """),
            Row(
                Field('companyName', wrapper_class='col-sm-12'),
                Field('department', wrapper_class='col-sm-6'),
                Field('jobTitle', wrapper_class='col-sm-6'),
                Field('assistantName', wrapper_class='col-sm-12'),
                Field('businessHomePage', wrapper_class='col-sm-12'),
                Field('businessPhones1', wrapper_class='col-sm-6'),
                Field('businessPhones2', wrapper_class='col-sm-6'),
                Field('emailAdresses2', wrapper_class='col-sm-12'),
                Field('businessAddress', wrapper_class='col-sm-12'),
                ),
            )

真正添加到代码中的主要部分是每个占位符都必须有一行。它只是看起来有点乱,虽然我接受它比写出所有的 html 更容易。

谢谢!

标签: pythonhtmldjangodjango-formsdjango-crispy-forms

解决方案


推荐阅读