kopia lustrzana https://github.com/wagtail/wagtail
Respect custom tag models in WagtailAdminModelForm formfield_for_dbfield logic
rodzic
0099de92f6
commit
9f8cddca73
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
Ładowanie…
Reference in New Issue