﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
23703	django.db.models.field.subclassing overwrites my subclass	mozumder	nobody	"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
-------

(note the setattr() is outside of the if func.)

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
-------

(note the setattr() is inside of the if func.)

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?  I would like to be able to produce my own Creator() function.

-bobby"	Bug	closed	Uncategorized	1.7	Normal	wontfix			Unreviewed	0	0	0	0	0	0
