如何在以下方案中实现基于类的默认值?我的意思是,我想继承类设置默认值“数量”是不同的:Django模型继承层次结构中基于类的默认值
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
我已经看过this stackoverflow question,但它并没有解决同样的问题。我以为会工作的唯一的事是超载OrderDocumentBase
的__init__
方法是这样的:
def __init__(self, *args, **kwargs):
"""
Overload __init__ to enable dynamic set of default to 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
这工作,但只是部分,并且表现相当wierdly。在管理界面中,我可以看到仅在第二次或后一页刷新后才设置默认值。在第一次尝试,None
被设置:(
第二种可能性是在每个班级数场的重新定义,但是这似乎并没有太多的漂亮。有没有其他办法?
有人能帮助?
这不会给你一个语法错误'number = models.PositiveIntegerField(default = self.create_number())'?在这方面没有“自我”。 – 2010-09-24 12:24:20
是的,它的确如此 - 我只想表现出类似于我需要实现的解决方案。对不起,误导了剪辑。 – xaralis 2010-09-26 12:24:43