Merge pull request #144 from dmarcelino/streamfield_fallback

Fix StreamField fallback (addresses #143)
This commit is contained in:
Diogo Marques 2017-12-14 12:03:26 +00:00 committed by GitHub
commit ffaa485d83
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 2 deletions

View file

@ -17,6 +17,7 @@ from wagtail.contrib.wagtailroutablepage.models import RoutablePageMixin
from wagtail.wagtailadmin.edit_handlers import FieldPanel, \
MultiFieldPanel, FieldRowPanel, InlinePanel, StreamFieldPanel, RichTextFieldPanel
from wagtail.wagtailcore.models import Page, Site
from wagtail.wagtailcore.fields import StreamField, StreamValue
from wagtail.wagtailcore.url_routing import RouteResult
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
from wagtail.wagtailsearch.index import SearchField
@ -88,8 +89,14 @@ class WagtailTranslator(object):
translated_field.field_name = build_localized_fieldname(field.field_name, language)
model.search_fields = list(model.search_fields) + [translated_field]
# SLUG FIELD PATCHING
# OVERRIDE FIELDS
model_fields = model._meta.get_fields()
for field in model_fields:
if isinstance(field, StreamField) and field.name in translation_registered_fields:
descriptor = getattr(model, field.name)
_patch_stream_field_meaningful_value(descriptor)
# SLUG FIELD PATCHING
try:
slug_field = model._meta.get_field('slug')
_patch_pre_save(slug_field)
@ -408,6 +415,18 @@ def _patch_clean(model):
model.clean = clean
def _patch_stream_field_meaningful_value(field):
old_meaningful_value = field.meaningful_value
def meaningful_value(self, val, undefined):
"""
Check if val is considered non-empty.
"""
if isinstance(val, StreamValue):
return len(val.stream_data) != 0
return old_meaningful_value(self, val, undefined)
field.meaningful_value = meaningful_value.__get__(field)
def _patch_pre_save(field):
if not ORIGINAL_SLUG_LANGUAGE:

View file

@ -18,6 +18,6 @@ USE_TZ = False
MIDDLEWARE_CLASSES = ()
MODELTRANSLATION_AUTO_POPULATE = False
MODELTRANSLATION_FALLBACK_LANGUAGES = ()
MODELTRANSLATION_FALLBACK_LANGUAGES = {'default': (MODELTRANSLATION_DEFAULT_LANGUAGE,)}
ROOT_URLCONF = 'wagtail_modeltranslation.tests.urls'

View file

@ -437,3 +437,16 @@ class WagtailModeltranslationTest(WagtailModeltranslationTestBase):
except AttributeError:
# python 2.7
self.assertItemsEqual(expected_fields, model_search_fields)
def test_streamfield_fallback(self):
body_text = '[{"value": "Some text", "type": "text"}]'
page = models.StreamFieldPanelPage(title='Streamfield Fallback', slug='streamfield_fallback',
depth=1, path='0005', body=body_text)
page.save()
self.assertEqual(str(page.body), '<div class="block-text">Some text</div>')
trans_real.activate('en')
self.assertEqual(str(page.body), '<div class="block-text">Some text</div>',
'page.body did not fallback to original language.')