diff --git a/combo/apps/wcs/forms.py b/combo/apps/wcs/forms.py index 9873d15b..79172e4e 100644 --- a/combo/apps/wcs/forms.py +++ b/combo/apps/wcs/forms.py @@ -132,6 +132,15 @@ class WcsCardInfoCellForm(forms.ModelForm): return cleaned_data +class WcsCardInfoCellAppearanceBaseForm(forms.ModelForm): + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + if self.instance.title_type != 'manual': + self.instance.custom_title = '' + self.instance.save() + return self.instance + + class WcsCardInfoCellDisplayForm(forms.ModelForm): customize_display = forms.BooleanField(label=_('Customize display'), required=False) diff --git a/combo/apps/wcs/models.py b/combo/apps/wcs/models.py index 7556fcdb..75540a9c 100644 --- a/combo/apps/wcs/models.py +++ b/combo/apps/wcs/models.py @@ -1565,6 +1565,11 @@ class WcsCardInfosCell(CardMixin, CellBase): def get_appearance_fields(self): return ['title_type', 'custom_title'] + def get_appearance_form_class(self): + from .forms import WcsCardInfoCellAppearanceBaseForm + + return super().get_appearance_form_class(base_options_form_class=WcsCardInfoCellAppearanceBaseForm) + def get_manager_tabs(self): from .forms import WcsCardInfoCellDisplayForm diff --git a/combo/data/models.py b/combo/data/models.py index 91053605..e256a240 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -1187,7 +1187,7 @@ class CellBase(models.Model, metaclass=CellMeta): def get_appearance_fields(self): return ['title', 'custom_title'] - def get_appearance_form_class(self): + def get_appearance_form_class(self, base_options_form_class=None): model_fields = {field.name for field in self._meta.local_concrete_fields} fields = [field for field in self.get_appearance_fields() if field in model_fields] + [ 'slug', @@ -1205,7 +1205,7 @@ class CellBase(models.Model, metaclass=CellMeta): page = self.page cell = self - class OptionsForm(model_forms.ModelForm): + class OptionsForm(base_options_form_class or model_forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if page.placeholder_options.get(cell.placeholder, {}).get('fx_grid_layout'): diff --git a/tests/wcs/test_card.py b/tests/wcs/test_card.py index c1c17094..02496ea9 100644 --- a/tests/wcs/test_card.py +++ b/tests/wcs/test_card.py @@ -176,6 +176,16 @@ def test_card_cell_setup(mock_send, app, admin_user): resp = resp.forms[0].submit() assert resp.context['form'].errors == {'card_ids': ['This field is required.']} + # check custom_title + for title_type in ['auto', 'empty']: + cell.custom_title = 'foo bar' + cell.save() + resp = app.get('/manage/pages/%s/' % page.pk) + resp.forms[0]['c%s-title_type' % cell.get_reference()].value = title_type + resp = resp.forms[0].submit() + cell.refresh_from_db() + assert cell.custom_title == '' + def test_card_cell_custom_schema_migration(): cell = WcsCardInfosCell()