diff --git a/peewee.py b/peewee.py index 759fff52c..a9d9a62cf 100644 --- a/peewee.py +++ b/peewee.py @@ -4452,7 +4452,7 @@ def python_value(self, value): return value if value is None else self.adapt(value) def to_value(self, value): - return Value(value, self.db_value, self.unpack) + return Value(value, self.db_value, unpack=False) def get_sort_key(self, ctx): return self._sort_key diff --git a/playhouse/postgres_ext.py b/playhouse/postgres_ext.py index d9f1aacaf..d2b376620 100644 --- a/playhouse/postgres_ext.py +++ b/playhouse/postgres_ext.py @@ -154,7 +154,6 @@ def __init__(self, *args, **kwargs): class ArrayField(IndexedFieldMixin, Field): passthrough = True - unpack = False def __init__(self, field_class=IntegerField, field_kwargs=None, dimensions=1, convert_values=False, *args, **kwargs): @@ -238,7 +237,6 @@ class DateTimeTZField(DateTimeField): class HStoreField(IndexedFieldMixin, Field): field_type = 'HSTORE' - unpack = False __hash__ = Field.__hash__ def __getitem__(self, key): @@ -284,7 +282,6 @@ def contains_any(self, *keys): class JSONField(Field): field_type = 'JSON' - unpack = False _json_datatype = 'json' def __init__(self, dumps=None, *args, **kwargs): diff --git a/tests/regressions.py b/tests/regressions.py index 323075c56..82afe198a 100644 --- a/tests/regressions.py +++ b/tests/regressions.py @@ -1,4 +1,5 @@ import datetime +import json from peewee import * from playhouse.hybrid import * @@ -1067,3 +1068,43 @@ def assertQ(q): .filter(page__site__url='s1') .order_by(PageItem.content)) assertQ(q) + + +class JsonField(TextField): + def db_value(self, value): + return json.dumps(value) if value is not None else None + def python_value(self, value): + if value is not None: + return json.loads(value) + +class JM(TestModel): + key = TextField() + data = JsonField() + + +class TestListValueConversion(ModelTestCase): + requires = [JM] + + def test_list_value_conversion(self): + jm = JM.create(key='k1', data=['i0', 'i1']) + jm.key = 'k1-x' + jm.save() + + jm_db = JM.get(JM.key == 'k1-x') + self.assertEqual(jm_db.data, ['i0', 'i1']) + + JM.update(data=['i1', 'i2']).execute() + jm_db = JM.get(JM.key == 'k1-x') + self.assertEqual(jm_db.data, ['i1', 'i2']) + + jm2 = JM.create(key='k2', data=['i3', 'i4']) + + jm_db.data = ['i1', 'i2', 'i3'] + jm2.data = ['i4', 'i5'] + + JM.bulk_update([jm_db, jm2], fields=[JM.key, JM.data]) + + jm = JM.get(JM.key == 'k1-x') + self.assertEqual(jm.data, ['i1', 'i2', 'i3']) + jm2 = JM.get(JM.key == 'k2') + self.assertEqual(jm2.data, ['i4', 'i5'])