【发布时间】:2015-06-26 09:35:49
【问题描述】:
样本:
from django.db import models
class BaseModel(models.Model):
CHOICES = ((0, 'nope'),
(1, 'yep'),)
# ...
class P(BaseModel):
p = models.SmallIntegerField(default=1, choices=BaseModel.CHOICES)
如果我只使用BaseModel.CHOICES,则没有必要继承BaseModel。但我必须继承它,因为其他列。
如何让P继承CHOICES属性而不是使用它父亲的CHOICES?
【问题讨论】:
-
您是否尝试创建函数返回选择值并使用它。 like def get_choice(): return ((0, 'nope'), (1, 'yep'),) 并使用 like p = models.SmallIntegerField(default=1,choices=get_choice)
-
没有像
super()这样的神奇东西,如果这就是你要问的。这似乎是正确的方法。 -
@giaosudau 我只是想把所有的东西都放在
BaseModel中,让子类看起来足够干净,你的意思是我应该为每个子类写一个get_choice方法吗? -
@Sinux 它在一个类之外只是一个静态函数或者只是创建一个常量。
-
@giaosudau 不只是一个
CHOICES,那么我需要为BaseModel中的每个属性写一个方法,可能是一个很大的数字
标签: python django python-2.7 python-3.x django-models