Bugfix: Turns out 'prefix' and 'suffix' were protected fields!

This commit is contained in:
Oliver Walters 2020-05-16 11:05:45 +10:00
parent 08d177e55f
commit 498ad4162c
4 changed files with 40 additions and 18 deletions

View File

@ -8,7 +8,7 @@ from __future__ import unicode_literals
from django import forms from django import forms
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field from crispy_forms.layout import Layout, Field
from crispy_forms.bootstrap import PrependedAppendedText from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText
from django.contrib.auth.models import User from django.contrib.auth.models import User
@ -16,9 +16,9 @@ class HelperForm(forms.ModelForm):
""" Provides simple integration of crispy_forms extension. """ """ Provides simple integration of crispy_forms extension. """
# Custom field decorations can be specified here, per form class # Custom field decorations can be specified here, per form class
prefix = {} field_prefix = {}
suffix = {} field_suffix = {}
placeholder = {} field_placeholder = {}
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(forms.ModelForm, self).__init__(*args, **kwargs) super(forms.ModelForm, self).__init__(*args, **kwargs)
@ -37,18 +37,18 @@ class HelperForm(forms.ModelForm):
layouts = [] layouts = []
for field in self.fields: for field in self.fields:
prefix = self.prefix.get(field, None) prefix = self.field_prefix.get(field, None)
suffix = self.suffix.get(field, None) suffix = self.field_suffix.get(field, None)
placeholder = self.placeholder.get(field, '') placeholder = self.field_placeholder.get(field, '')
# Look for font-awesome icons # Look for font-awesome icons
if prefix and prefix.startswith('fa-'): if prefix and prefix.startswith('fa-'):
prefix = "<span class='fas {fa}'></span>".format(fa=prefix) prefix = r"<i class='fas {fa}'/>".format(fa=prefix)
if suffix and suffix.startswith('fa-'): if suffix and suffix.startswith('fa-'):
suffix = "<span class='fas {fa}'></span>".format(fa=suffix) suffix = r"<i class='fas {fa}'/>".format(fa=suffix)
if prefix or suffix or placeholder: if prefix and suffix:
layouts.append( layouts.append(
Field( Field(
PrependedAppendedText( PrependedAppendedText(
@ -60,8 +60,30 @@ class HelperForm(forms.ModelForm):
) )
) )
elif prefix:
layouts.append(
Field(
PrependedText(
field,
prefix,
placeholder=placeholder
)
)
)
elif suffix:
layouts.append(
Field(
AppendedText(
field,
suffix,
placeholder=placeholder
)
)
)
else: else:
layouts.append(Field(field)) layouts.append(Field(field, placeholder=placeholder))
self.helper.layout = Layout(*layouts) self.helper.layout = Layout(*layouts)

View File

@ -93,12 +93,12 @@ class EditPurchaseOrderForm(HelperForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.prefix = { self.field_prefix = {
'reference': 'PO', 'reference': 'PO',
'link': 'fa-link', 'link': 'fa-link',
} }
self.placeholder = { self.field_placeholder = {
'reference': _('Enter purchase order number'), 'reference': _('Enter purchase order number'),
} }
@ -120,12 +120,12 @@ class EditSalesOrderForm(HelperForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.prefix = { self.field_prefix = {
'reference': 'SO', 'reference': 'SO',
'link': 'fa-link', 'link': 'fa-link',
} }
self.placeholder = { self.field_placeholder = {
'reference': _('Enter sales order number'), 'reference': _('Enter sales order number'),
} }

View File

@ -108,11 +108,11 @@ class SerializeStockForm(HelperForm):
else: else:
sn = str(sn) sn = str(sn)
self.prefix = { self.field_prefix = {
'serial_numbers': 'fa-hashtag', 'serial_numbers': 'fa-hashtag',
} }
self.placeholder = { self.field_placeholder = {
'serial_numbers': sn 'serial_numbers': sn
} }

View File

@ -717,7 +717,7 @@ class StockItemEdit(AjaxUpdateView):
query = query.filter(part=item.part.id) query = query.filter(part=item.part.id)
form.fields['supplier_part'].queryset = query form.fields['supplier_part'].queryset = query
if not item.part.trackable: if not item.part.trackable or not item.serialized:
form.fields.pop('serial') form.fields.pop('serial')
return form return form