src/hdalab/fields.py
changeset 545 c752fdee555b
parent 458 604b887e70c3
--- a/src/hdalab/fields.py	Tue Mar 17 22:10:17 2015 +0100
+++ b/src/hdalab/fields.py	Wed Mar 18 18:52:43 2015 +0100
@@ -10,18 +10,34 @@
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import models
 from django.db.models import fields as django_fields
-from south.modelsinspector import add_introspection_rules
 
+def isalambda(v):
+    LAMBDA = lambda:0
+    return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
 
 class OneToOneField(models.OneToOneField):    
-    def __init__(self, to, **kwargs):
+    def __init__(self, *args, **kwargs):
         self.related_default = kwargs.pop('related_default', None)
-        super(OneToOneField, self).__init__(to, **kwargs)
+        #This is BAD. Did this to avoid more work in Django 1.7 migration
+        #TODO: correct this
+        if self.related_default == "lambda:":
+            self.related_default = lambda instance: None
+        super(OneToOneField, self).__init__(*args, **kwargs)
 
     def contribute_to_related_class(self, cls, related):
         setattr(cls, related.get_accessor_name(),
                 SingleRelatedObjectDescriptor(related, self.related_default))
 
+    def deconstruct(self):
+        name, path, args, kwargs = super(OneToOneField, self).deconstruct()
+        if self.related_default is not None:
+            # this is VERY dirty and works only in our application.
+            #TODO: correct this...
+            if isalambda(self.related_default):
+                kwargs['related_default'] = "lambda:"
+            else:
+                kwargs['related_default'] = self.related_default
+        return name, path, args, kwargs
 
 class SingleRelatedObjectDescriptor(django_fields.related.SingleRelatedObjectDescriptor):
     def __init__(self, related, default):
@@ -41,12 +57,3 @@
                 setattr(value, self.related.field.get_cache_name(), instance)
             return value
         
-add_introspection_rules([
-    (
-        [OneToOneField],
-        [],         # Positional arguments (not used)
-        {           # Keyword argument
-            "related_default": ["related_default", {"default": None, "is_django_function": True}],
-        },
-    ),
-], ["^hdalab\.fields\.OneToOneField"])
\ No newline at end of file