【发布时间】:2011-04-16 18:20:42
【问题描述】:
如何在以下方案中实现基于类的默认值?我的意思是,我想继承类为“数字”设置不同的默认值:
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
这有效,但只是部分有效,而且表现得很奇怪。在管理界面中,我可以看到仅在第二个或后一页刷新后才设置默认值。第一次尝试时,正在设置None :(
第二种可能性是在每个类中重新定义数字字段,但这似乎不太漂亮。有没有其他办法?
有人可以帮忙吗?
【问题讨论】:
-
这不会给你一个语法错误
number = models.PositiveIntegerField(default=self.create_number())吗?在这种情况下没有self。 -
是的,确实如此——我只是想展示一些与我需要实现的解决方案类似的东西。抱歉误导了。
标签: django dynamic model default field