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
Post a Comment