在Django中-模型继承-是否允许您覆盖父模型的属性?

在Django中-模型继承-是否允许您覆盖父模型的属性?,第1张

在Django中-模型继承-是否允许您覆盖父模型的属性?

更新的答案:正如人们在评论中指出的那样,原始答案未正确回答问题。
实际上,只有

LongNamedRestaurant
模型是在数据库中创建的,
Place
不是。

一个解决方案是创建一个代表“地方”的抽象模型。

AbstractPlace
,并从中继承:

class AbstractPlace(models.Model):    name = models.CharField(max_length=20)    rating = models.DecimalField()    class meta:        abstract = Trueclass Place(AbstractPlace):    passclass LongNamedRestaurant(AbstractPlace):    name = models.CharField(max_length=255)    food_type = models.CharField(max_length=25)

还请阅读@Mark答案,他很好地解释了为什么您不能更改从非抽象类继承的属性。

(请注意,这仅在Django 1.10之后才可行:在Django 1.10之前,无法修改从抽象类继承的属性。)

原始答案

从Django
1.10开始,就有可能!您只需要做您要求的:

class Place(models.Model):    name = models.CharField(max_length=20)    rating = models.DecimalField()    class meta:        abstract = Trueclass LongNamedRestaurant(Place):  # Subclassing `Place`.    name = models.CharField(max_length=255)  # Notice, I'm overriding

Place.name
to give it a longer length.
food_type = models.CharField(max_length=25)



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5668181.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存