Rafał Pitoń 11 лет назад
Родитель
Сommit
1beffc3033

+ 4 - 4
misago/conf/migrations/0001_initial.py

@@ -28,9 +28,9 @@ class Migration(SchemaMigration):
             ('order', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
             ('dry_value', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
             ('default_value', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('python_type', self.gf('django.db.models.fields.CharField')(max_length=255)),
+            ('python_type', self.gf('django.db.models.fields.CharField')(default='string', max_length=255)),
             ('is_lazy', self.gf('django.db.models.fields.BooleanField')(default=False)),
-            ('form_field', self.gf('django.db.models.fields.CharField')(max_length=255)),
+            ('form_field', self.gf('django.db.models.fields.CharField')(default='text', max_length=255)),
             ('pickled_field_extra', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
         ))
         db.send_create_signal(u'conf', ['Setting'])
@@ -50,7 +50,7 @@ class Migration(SchemaMigration):
             'default_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
             'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
             'dry_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'form_field': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'form_field': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '255'}),
             'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['conf.SettingsGroup']"}),
             u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
             'is_lazy': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
@@ -58,7 +58,7 @@ class Migration(SchemaMigration):
             'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
             'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
             'pickled_field_extra': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'python_type': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'python_type': ('django.db.models.fields.CharField', [], {'default': "'string'", 'max_length': '255'}),
             'setting': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
         },
         u'conf.settingsgroup': {

+ 21 - 10
misago/conf/migrationutils.py

@@ -1,6 +1,12 @@
+import base64
 from importlib import import_module
 from misago.conf.dbsettings import CACHE_KEY
+from misago.conf.hydrators import dehydrate_value
 from misago.core.cache import cache as default_cache
+try:
+    import cPickle as pickle
+except ImportError:
+    import pickle
 
 
 def with_conf_models(migration, this_migration=None):
@@ -59,21 +65,26 @@ def migrate_settings_group(orm, group_fixture, old_group_key=None):
 
     group.setting_set.all().delete()
 
-    for order, setting in enumerate(group_fixture['settings']):
-        setting['group'] = group
-        setting['order'] = order
+    for order, setting_fixture in enumerate(group_fixture['settings']):
+        setting_fixture['group'] = group
+        setting_fixture['order'] = order
 
         try:
-            value = custom_settings_values[setting['setting']]
+            value = custom_settings_values[setting_fixture['setting']]
         except KeyError:
-            value = setting.pop('value', None)
-        field_extra = setting.pop('field_extra', None)
+            value = setting_fixture.pop('value', None)
+        finally:
+            setting_fixture.pop('value', None)
 
-        setting = orm['conf.Setting'](**setting)
-        setting.value = value
-        setting.field_extra = field_extra
-        setting.save()
+        field_extra = setting_fixture.pop('field_extra', None)
+
+        setting = orm['conf.Setting'](**setting_fixture)
+        setting.dry_value = dehydrate_value(setting.python_type, value)
+        if field_extra:
+            pickled_extra = pickle.dumps(field_extra, pickle.HIGHEST_PROTOCOL)
+            setting.pickled_field_extra = base64.encodestring(pickled_extra)
 
+        setting.save()
 
 def delete_settings_cache():
     default_cache.delete(CACHE_KEY)

+ 1 - 1
misago/conf/models.py

@@ -42,7 +42,7 @@ class Setting(models.Model):
             self.dry_value = hydrators.dehydrate_value(self.python_type,
                                                        new_value)
         else:
-            self.dry_value = self.default_value
+            self.dry_value = None
         return self.value
 
     @property

+ 2 - 0
misago/conf/tests/test_models.py

@@ -33,8 +33,10 @@ class SettingModelTests(TestCase):
 
         setting_model.value = 3000
         self.assertEqual(setting_model.value, 3000)
+        self.assertEqual(setting_model.dry_value, '3000')
         setting_model.value = None
         self.assertEqual(setting_model.value, 9001)
+        self.assertEqual(setting_model.dry_value, None)
 
     def test_field_extra(self):
         """field extra is set correctly"""