Commits

Anonymous committed c8d215e

Fixed loading of EmbeddedModelFields that use a custom db_column.

  • Participants
  • Parent commits 957ea5f

Comments (0)

Files changed (2)

djangotoolbox/fields.py

     def to_python(self, values):
         if not isinstance(values, dict):
             return values
+
         module, model = values.pop('_module', None), values.pop('_model', None)
+        if module is not None:
+            model = getattr(import_module(module), model)
+        else:
+            model = self.embedded_model
 
-        # TODO/XXX: Workaround for old Python releases. Remove this someday.
-        # Let's make sure keys are instances of str
-        values = dict([(str(k), v) for k,v in values.items()])
-
-        if module is not None:
-            return getattr(import_module(module), model)(**values)
-        return self.embedded_model(**values)
+        data = {}
+        for field in model._meta.fields:
+            try:
+                # TODO/XXX: str(...) is a workaround for old Python releases.
+                # Remove this someday.
+                data[str(field.attname)] = values[field.column]
+            except KeyError:
+                pass
+        return model(**data)

djangotoolbox/tests.py

 
     class EmbeddedModel(models.Model):
         some_relation = models.ForeignKey(DictModel, null=True)
-        someint = models.IntegerField()
+        someint = models.IntegerField(db_column='custom')
         auto_now = models.DateTimeField(auto_now=True)
         auto_now_add = models.DateTimeField(auto_now_add=True)