Чтобы сохранить мои ModelForm
s СУХИЕ, я создал пользовательский ModelForm
с FormHelper
, чтобы я мог добавить Div
с кнопками Submit
и Cancel
к layout
. Он также предлагает возможность добавить пользовательский макет.
Это прекрасно работает, когда я не указываю пользовательский макет, но когда я это делаю, каждый раз, когда я обновляю страницу, он добавляет кнопки Div
(это не происходит, когда нет пользовательского макета)
Это пользовательский ModelForm
:
class ModelFormWithHelper(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
kwargs = self.get_helper_kwargs()
helper_class = FormHelper(self)
if 'custom_layout' in kwargs:
self.helper.layout = kwargs['custom_layout']
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-md-12'
self.helper.field_class = 'col-md-12'
self.helper.layout.append(
Div(
HTML('<br>'),
FormActions(
Submit('submit', 'Save'),
HTML('<a class="btn btn-secondary" href="{{ request.META.HTTP_REFERRER }}">Cancel</a>')
),
css_class='row justify-content-center',
),
)
def get_helper_kwargs(self):
kwargs = {}
for attr, value in self.Meta.__dict__.items():
if attr.startswith('helper_'):
new_attr = attr.split('_', 1)[1]
kwargs[new_attr] = value
return kwargs
И это ModelForm
:
class CargoForm(ModelFormWithHelper):
class Meta:
model = Cargo
exclude = []
helper_custom_layout = Layout(
Div(
'name',
'order',
css_class='col-6 offset-3',
),
)
Это форма без custom_layout после того, как я обновил страницу 3 раза:
А это форма с custom_layout после того, как я обновил страницу 3 раза:
Я знаю, что могу использовать метод self.helper.add_input
, чтобы избежать этой проблемы, но тогда я не смогу центрировать кнопки de.
Я быСпасибо, если кто-нибудь может помочь мне решить эту проблему. Заранее спасибо.