Django将“选择”添加到继承的模型字段

时间:2015-05-20 19:47:18

标签: django inheritance django-models override multi-table-inheritance

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

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模型中的继承color字段上设置Bluebird kwarg。从粗略的互联网搜索来看,似乎Django目前不允许模型子类覆盖父级的字段。

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

编辑:这个问题集中在Django< 1.8。在1.8中,添加了为字段choices kwarg传递可调用内容的功能,虽然这样很好,但我处理的系统还没有升级过目前不支持升级。

1 个答案:

答案 0 :(得分:0)

使用财产。

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

=IFERROR(VLOOKUP(A2,Sheet2!A:F,4,FALSE),A2)