Configure WagtailAdminModelForm to use TagField as standard for tag fields

pull/5865/head
Matt Westcott 2020-02-20 16:08:51 +00:00
rodzic c470b33d44
commit 163efe3753
2 zmienionych plików z 19 dodań i 2 usunięć

Wyświetl plik

@ -5,13 +5,14 @@ from modelcluster.forms import ClusterForm, ClusterFormMetaclass
from taggit.managers import TaggableManager
from wagtail.admin import widgets
from wagtail.admin.forms.tags import TagField
# 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)}
return {'form_class': TagField, 'tag_model': db_field.related_model}
FORM_FIELD_OVERRIDES = {

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,
RestaurantPage, SimplePage, ValidatedPage)
RestaurantPage, RestaurantTag, SimplePage, ValidatedPage)
from wagtail.tests.utils import WagtailTestUtils
@ -126,6 +126,22 @@ class TestGetFormForModel(TestCase):
form_html = RestaurantPageForm().as_p()
self.assertIn('/admin/tag\\u002Dautocomplete/tests/restauranttag/', form_html)
# widget should pick up the free_tagging=False attribute on the tag model
# and set itself to autocomplete only
self.assertIn('"autocompleteOnly": true', form_html)
# Free tagging should also be disabled at the form field validation level
RestaurantTag.objects.create(name='Italian', slug='italian')
RestaurantTag.objects.create(name='Indian', slug='indian')
form = RestaurantPageForm({
'title': 'Buonasera',
'slug': 'buonasera',
'tags': "Italian, delicious",
})
self.assertTrue(form.is_valid())
self.assertEqual(form.cleaned_data['tags'], ["Italian"])
def clear_edit_handler(page_cls):
def decorator(fn):