dynamic - Class based default value for field in Django model inheritance hierarchy -


how can 1 accomplish class-based default value in following scheme? mean, inherited classes set default value "number" differently:

class orderdocumentbase(pdfprintable):     number = models.positiveintegerfield(default=self.create_number())      @classmethod     def create_number(cls):         raise notimplementederror  class invoice(orderdocumentbase):     @classmethod     def create_number(cls):         return 1  class creditadvice(orderdocumentbase):     @classmethod     def create_number(cls):         return 2 

i have looked @ this stackoverflow question, doesn't address same problem. thing thought work overloading orderdocumentbase's __init__ method this:

def __init__(self, *args, **kwargs):     """     overload __init__ enable dynamic set of default number     """     super(orderdocumentbase, self).__init__(*args, **kwargs)     number_field = filter(lambda x: x.name == 'number', self._meta.fields)[0]     number = self.__class__.create_number()     number_field.default = number 

this works, partially , behaves quite wierdly. in admin interface, can see default being set after second or latter page refresh. on first try, none being set :(

second possibility redefinition of number field in each class, doesn't seem pretty. there other way?

can help?

it feel nicer via default=, use there doesn't have way @ class or specific model. have show in places admin, set in init() instead of save().

class orderdocumentbase(pdfprintable):     number = models.positiveintegerfield()      def __init__(self, *args, **kwargs):         super(orderdocumentbase, self).__init__(*args, **kwargs)         if not self.pk , not self.number:             self.number = self.default_number  class invoice(orderdocumentbase):     default_number = 2  class creditadvice(orderdocumentbase):     default_number = 3 

Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -