您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Django-Model继承中,是否允许重写父模型的属性?

在Django-Model继承中,是否允许重写父模型的属性?

更新的答案:正如人们在评论中指出的那样,原始答案未正确回答问题。实际上,只有LongNamedRestaurant模型是在数据库中创建的,Place不是。

一种解决方案是创建一个代表“地方”的抽象模型。AbstractPlace,并从中继承:

class AbstractPlace(models.Model):
    name = models.CharField(max_length=20)
    rating = models.DecimalField()

    class Meta:
        abstract = True

class Place(AbstractPlace):
    pass

class 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 = True

class 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)
Go 2022/1/1 18:21:19 有573人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶