Django在继承的模型字段中添加了' choices '



使用多表继承,有两个模型:

class Bird(models.Model):
    color = models.CharField()
class Bluebird(Bird):
    ...
使用这些模型,我可以这样做:
birds = Bird.objects.all()
for bird in birds:
    print bird.color

这是超级简单的,但我不喜欢允许人们在某些情况下定义任意的颜色值。例如,我想防止用户创建Bluebird对象,其颜色字段被设置为"blue"以外的任何东西,或者在更罕见的情况下,"grey""brown"。换句话说,我想在Bluebird模型中继承的color字段上设置choices kwarg。从粗略的互联网搜索中,Django目前似乎不允许模型子类覆盖父类的字段。

如何在父类中保留对color字段的访问,同时在子类中定义可接受的选择?

编辑:这个问题关注的是Django <1.8. 在1.8中,添加了为字段的choices kwarg传递可调用对象的能力,虽然这很好,但我正在处理一个尚未升级的系统,并且升级目前不是一个选项。

使用属性

你可以为每个模型定义颜色值,然后作为一个属性返回,如果颜色是固定的,你不需要它在数据库中。

class Bird(models.Model):
   COLOR = None
   @property
   def color(self):
       return self.COLOR
class BlueBird(Bird):
   COLOR = 'Blue'
>>> b = BlueBird()
>>> b.color
'Blue'

相关内容

  • 没有找到相关文章

最新更新