5

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

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"。换句话说,我想在模型内的继承字段choices上设置 kwarg 。从粗略的互联网搜索来看,Django 目前似乎不允许模型子类覆盖父级的字段。colorBluebird

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

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

4

1 回答 1

-1

使用属性。

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

class Bird(models.Model):
   COLOR = None

   @property
   def color(self):
       return self.COLOR

class BlueBird(Bird):
   COLOR = 'Blue'

>>> b = BlueBird()
>>> b.color
'Blue'
于 2017-09-05T16:02:18.310 回答