Python Django表单(带脆表单)-我是否过度复杂化了?有没有更简单的方法?
我在Django使用crispy forms创建了一个表单,它工作得很好,但我可以通过查看它来判断,我很可能是过度设计了它。这是许多非常相似的代码片段 我应该怎么做呢?我想有更好的办法Python Django表单(带脆表单)-我是否过度复杂化了?有没有更简单的方法?,python,html,django,django-forms,django-crispy-forms,Python,Html,Django,Django Forms,Django Crispy Forms,我在Django使用crispy forms创建了一个表单,它工作得很好,但我可以通过查看它来判断,我很可能是过度设计了它。这是许多非常相似的代码片段 我应该怎么做呢?我想有更好的办法 class New_Contact(forms.Form): title = forms.CharField(label=False, max_length=10,required=False) givenName = forms.CharField(label=False, max_lengt
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'),
),
)
class新联系人(forms.Form):
title=forms.CharField(label=False,max_length=10,required=False)
givenName=forms.CharField(标签=False,最大长度=255)
middleName=forms.CharField(label=False,max_length=255,required=False)
姓氏=forms.CharField(标签=False,最大长度=255)
jobTitle=forms.CharField(标签=False,最大长度=255,必需=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)#电话
mobilePhone=forms.CharField(label=False,max_length=255,required=False)#电话
businessPhones1=forms.CharField(label=False,max_length=255,required=False)#电话
businessPhones2=forms.CharField(label=False,max_length=255,required=False)#电话
homeAddress=forms.CharField(label=False,required=False,widget=forms.Textarea(attrs={'style':'height:8em'}))#地址
businessAddress=forms.CharField(label=False,required=False,widget=forms.Textarea(attrs={'style':'height:8em'}))#地址
emailAddresses1=forms.CharField(label=False,max_length=255,required=False)#邮件
emailAddresses2=forms.CharField(label=False,max_length=255,required=False)#邮件
定义初始化(self,*args,**kwargs):
super()
self.helper=FormHelper()
self.fields['title'].widget.attrs['placeholder']='title'
self.fields['givenName'].widget.attrs['placeholder']='First Name'
self.fields['middleName'].widget.attrs['placeholder']='middleName'
self.fields['Name'].widget.attrs['placeholder']='Last Name'
self.fields['mobilePhone'].widget.attrs['placeholder']='Mobile'
self.fields['homePhones'].widget.attrs['placeholder']='homephone'
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']='companyName'
self.fields['department'].widget.attrs['placeholder']='department'
self.fields['jobTitle'].widget.attrs['placeholder']='Job Title'
self.fields['assistantName'].widget.attrs['placeholder']='assistantName'
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=布局(
HTML(“”)
个人资料
"""),
划船(
字段('title',wrapper_class='col-sm-3'),
字段('givenName',wrapper_class='col-sm-5'),
字段('middleName',wrapper_class='col-sm-4'),
字段('姓氏',wrapper_class='col-sm-12'),
字段('mobilePhone',wrapper_class='col-sm-6'),
字段('homePhones',wrapper_class='col-sm-6'),
字段('emailAddresses1',wrapper_class='col-sm-12'),
字段('homeAddress',wrapper_class='col-sm-12'),
),
HTML(“”)
公司详情
"""),
划船(
字段('companyName',wrapper_class='col-sm-12'),
字段('department',wrapper_class='col-sm-6'),
字段('jobTitle',wrapper_class='col-sm-6'),
字段('assistantName',wrapper_class='col-sm-12'),
字段('businessHomePage',wrapper_class='col-sm-12'),
字段('businessPhones1',wrapper_class='col-sm-6'),
字段('businessPhones2',wrapper_class='col-sm-6'),
字段('EmailAddressS2',wrapper_class='col-sm-12'),
字段('businessAddress',wrapper_class='col-sm-12'),
),
)
真正添加到代码中的主要部分是每个占位符都必须有一行。它看起来有点乱,尽管我承认这比写出所有的html要容易
谢谢 从表单上看,你似乎在为每个字段添加占位符和类属性,对吗?是的,没错,你可以向表单字段本身添加html属性。我已经设法通过使用widget=forms.TextInput(attrs={'placeholder':'Title')消除了对占位符部分的需要。顺便说一句,你也可以将类添加到字段中,您可以使用小部件将任何html属性添加到字段中,因为表单只是将html呈现到模板中。您可以添加并使用多个属性,如so
attrs={'class':'col-sm-12','placeholder':'Title'}