Respect custom tag models in WagtailAdminModelForm formfield_for_dbfield logic

pull/5837/head
Matt Westcott 2020-02-18 00:12:05 +00:00
rodzic 0099de92f6
commit 9f8cddca73
2 zmienionych plików z 17 dodań i 2 usunięć

Wyświetl plik

@ -9,11 +9,16 @@ from wagtail.admin import widgets
# Form field properties to override whenever we encounter a model field
# that matches one of these types - including subclasses
def _get_tag_field_overrides(db_field):
return {'widget': widgets.AdminTagWidget(tag_model=db_field.related_model)}
FORM_FIELD_OVERRIDES = {
models.DateField: {'widget': widgets.AdminDateInput},
models.TimeField: {'widget': widgets.AdminTimeInput},
models.DateTimeField: {'widget': widgets.AdminDateTimeInput},
TaggableManager: {'widget': widgets.AdminTagWidget},
TaggableManager: _get_tag_field_overrides,
}
# Form field properties to override whenever we encounter a model field
@ -42,6 +47,9 @@ def formfield_for_dbfield(db_field, **kwargs):
break
if overrides:
if callable(overrides):
overrides = overrides(db_field)
kwargs = dict(copy.deepcopy(overrides), **kwargs)
return db_field.formfield(**kwargs)

Wyświetl plik

@ -20,7 +20,7 @@ from wagtail.images.edit_handlers import ImageChooserPanel
from wagtail.tests.testapp.forms import ValidatedPageForm
from wagtail.tests.testapp.models import (
EventPage, EventPageChooserModel, EventPageSpeaker, PageChooserModel,
SimplePage, ValidatedPage)
RestaurantPage, SimplePage, ValidatedPage)
from wagtail.tests.utils import WagtailTestUtils
@ -119,6 +119,13 @@ class TestGetFormForModel(TestCase):
self.assertEqual(type(form.fields['date_from']), forms.DateField)
self.assertEqual(type(form.fields['date_from'].widget), forms.PasswordInput)
def test_tag_widget_is_passed_tag_model(self):
RestaurantPageForm = get_form_for_model(
RestaurantPage, form_class=WagtailAdminPageForm
)
form_html = RestaurantPageForm().as_p()
self.assertIn('/admin/tag\\u002Dautocomplete/tests/restauranttag/', form_html)
def clear_edit_handler(page_cls):
def decorator(fn):