Anonymous avatar Anonymous committed c8d215e

Fixed loading of EmbeddedModelFields that use a custom db_column.

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)
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.