misc: add possibility to define tabs by specifying fields (#63390)
This commit is contained in:
parent
b406d1808c
commit
2ba7eb256e
|
@ -409,14 +409,13 @@ class Map(CellBase):
|
|||
return forms.models.modelform_factory(self.__class__, fields=fields)
|
||||
|
||||
def get_manager_tabs(self):
|
||||
zoom_fields = ['initial_zoom', 'min_zoom', 'max_zoom']
|
||||
tabs = super().get_manager_tabs()
|
||||
tabs.insert(
|
||||
1,
|
||||
{
|
||||
'slug': 'zoom',
|
||||
'name': _('Zoom'),
|
||||
'form': forms.models.modelform_factory(self.__class__, fields=zoom_fields),
|
||||
'fields': ['initial_zoom', 'min_zoom', 'max_zoom'],
|
||||
},
|
||||
)
|
||||
return tabs
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django import template
|
||||
from django import forms, template
|
||||
from django.urls import reverse
|
||||
|
||||
register = template.Library()
|
||||
|
@ -34,6 +34,8 @@ def cell_form(context, cell):
|
|||
continue
|
||||
else:
|
||||
form_name = '%s_form' % tab['slug']
|
||||
if tab.get('fields'):
|
||||
tab['form'] = forms.models.modelform_factory(cell.__class__, fields=tab['fields'])
|
||||
tab['form_instance'] = tab['form'](initial={}, instance=cell, prefix='c%s' % cell.get_reference())
|
||||
context[form_name] = tab['form_instance']
|
||||
context['cell'] = cell
|
||||
|
|
|
@ -20,7 +20,7 @@ import json
|
|||
import tarfile
|
||||
from operator import attrgetter, itemgetter
|
||||
|
||||
from django import template
|
||||
from django import forms, template
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
||||
|
@ -703,6 +703,10 @@ class PageEditCellView(ManagedPageMixin, UpdateView):
|
|||
try:
|
||||
with transaction.atomic():
|
||||
for tab in self.object.get_manager_tabs():
|
||||
if tab.get('fields'):
|
||||
tab['form'] = forms.models.modelform_factory(
|
||||
self.object.__class__, fields=tab['fields']
|
||||
)
|
||||
form = tab['form'](**self.get_form_kwargs())
|
||||
if form.is_valid():
|
||||
self.object = form.save()
|
||||
|
@ -716,6 +720,8 @@ class PageEditCellView(ManagedPageMixin, UpdateView):
|
|||
pass
|
||||
|
||||
for tab in self.object.get_manager_tabs():
|
||||
if tab.get('fields'):
|
||||
tab['form'] = forms.models.modelform_factory(self.object.__class__, fields=tab['fields'])
|
||||
# if current form had no errors, create it anew
|
||||
# so it can get new dynamic fields
|
||||
form = tab_error_forms.get(tab['slug']) or tab['form'](**self.get_form_kwargs())
|
||||
|
|
Loading…
Reference in New Issue