--- 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