gpt4 book ai didi

Django 将 `choices` 添加到继承的模型字段

转载 作者:行者123 更新时间:2023-12-02 04:49:10 25 4
gpt4 key购买 nike

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

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 继承了 color来自 Bluebird 内的字段模型。从粗略的互联网搜索来看,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'

关于Django 将 `choices` 添加到继承的模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com