django.db.models.field.subclassing issue

71 views
Skip to first unread message

Bobby Mozumder

unread,
Oct 22, 2014, 7:11:05 AM10/22/14
to django-d...@googlegroups.com
In the file subclassing.py, should the following:


def make_contrib(superclass, func=None):
    """
    Returns a suitable contribute_to_class() method for the Field subclass.

    If 'func' is passed in, it is the existing contribute_to_class() method on
    the subclass and it is called before anything else. It is assumed in this
    case that the existing contribute_to_class() calls all the necessary
    superclass methods.
    """
    def contribute_to_class(self, cls, name):
        if func:
            func(self, cls, name)
        else:
            super(superclass, self).contribute_to_class(cls, name)
        setattr(cls, self.name, Creator(self))

    return contribute_to_class

instead be:

def make_contrib(superclass, func=None):
    """
    Returns a suitable contribute_to_class() method for the Field subclass.

    If 'func' is passed in, it is the existing contribute_to_class() method on
    the subclass and it is called before anything else. It is assumed in this
    case that the existing contribute_to_class() calls all the necessary
    superclass methods.
    """
    def contribute_to_class(self, cls, name):
        if func:
            func(self, cls, name)
        else:
            super(superclass, self).contribute_to_class(cls, name)
            setattr(cls, self.name, Creator(self))

    return contribute_to_class

Should the setattr() should be called only when there isn’t a contribute_to_class() method.  

I ask because in my own custom field, I have a  contribute_to_class() function as well:

    def contribute_to_class(self, cls, name):
        super(myCustomField, self).contribute_to_class(cls, name)
        setattr(cls, self.name, myCustomCreator(self))

But, because of the setattr() in the SubfieldBase metaclass, my own setattr() gets overwritten by the default set_attr().. I therefore can’t have my own field of the same name with my own custom Creator().

Is this expected behavior?

-bobby



Tim Graham

unread,
Oct 22, 2014, 3:34:23 PM10/22/14
to django-d...@googlegroups.com
SubfieldBase is deprecated in Django 1.8, so I don't think there will be interest in fixing any issues with it.
Reply all
Reply to author
Forward
0 new messages