mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-05-12 17:23:15 +00:00
try to implement to_python and get_prep_value; run into awkward discrepancies between renderable and JSON-ish values
This commit is contained in:
parent
e1cf9f9196
commit
3694756e4e
2 changed files with 18 additions and 3 deletions
|
|
@ -62,7 +62,7 @@ class StreamWidget(widgets.Widget):
|
|||
self.block_def = block_def
|
||||
|
||||
def render(self, name, value, attrs=None):
|
||||
bound_block = self.block_def.bind(json.loads(value), prefix=name)
|
||||
bound_block = self.block_def.bind(value, prefix=name)
|
||||
js_initializer = self.block_def.js_initializer()
|
||||
if js_initializer:
|
||||
js_snippet = """
|
||||
|
|
@ -82,4 +82,4 @@ class StreamWidget(widgets.Widget):
|
|||
return self.block_def.all_media()
|
||||
|
||||
def value_from_datadict(self, data, files, name):
|
||||
return json.dumps(self.block_def.value_from_datadict(data, files, name))
|
||||
return self.block_def.value_from_datadict(data, files, name)
|
||||
|
|
|
|||
|
|
@ -4,9 +4,11 @@ import json
|
|||
|
||||
from django.db import models
|
||||
from django.forms import Textarea
|
||||
from django.utils.six import with_metaclass
|
||||
|
||||
from wagtail.wagtailcore.rich_text import DbWhitelister, expand_db_html
|
||||
from wagtail.utils.widgets import WidgetWithScript
|
||||
from wagtail.wagtailadmin.blocks import StreamBlock # FIXME: wagtailcore shouldn't be depending on wagtailadmin
|
||||
|
||||
|
||||
class RichTextArea(WidgetWithScript, Textarea):
|
||||
|
|
@ -38,12 +40,25 @@ class RichTextField(models.TextField):
|
|||
return super(RichTextField, self).formfield(**defaults)
|
||||
|
||||
|
||||
class StreamField(models.TextField):
|
||||
class StreamField(with_metaclass(models.SubfieldBase, models.TextField)):
|
||||
def __init__(self, block_types, **kwargs):
|
||||
self.block_types = block_types
|
||||
self.stream_block = StreamBlock(block_types)
|
||||
super(StreamField, self).__init__(**kwargs)
|
||||
|
||||
def deconstruct(self):
|
||||
name, path, args, kwargs = super(StreamField, self).deconstruct()
|
||||
kwargs['block_types'] = self.block_types
|
||||
return name, path, args, kwargs
|
||||
|
||||
def to_python(self, value):
|
||||
if value is None:
|
||||
return []
|
||||
elif isinstance(value, list):
|
||||
return value
|
||||
else: # assume string
|
||||
return self.stream_block.renderable(json.loads(value))
|
||||
|
||||
def get_prep_value(self, value):
|
||||
return json.dumps(value)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue