diff -r ed812f1f7592 -r c752fdee555b src/hdalab/fields.py --- 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