【问题标题】:Access the superclass of a Django Model访问 Django 模型的超类
【发布时间】:2016-05-12 12:05:16
【问题描述】:

给定一个 Django 模型

class Sub(models.Model):
    name = models.CharField(max_length=100)
    size_in_inches = models.IntegerField(default=6)

class TunaSub(Sub):
    fish_ingredient = models.CharField(max_length=10, default="Tuna")

class MeatballSub(Sub):
    meat_ingredient = models.CharField(max_length=20, default="Meatball with Cheese")

我想访问超类的属性,例如 __str__ 方法(在 Python 3.x 中)。我该怎么做?这是正确的解决方案吗?

class TunaSub(Sub):
    fish_ingredient = models.CharField(max_length=10, default="Tuna")
    def __str__(self):
        return self.super().name

class MeatballSub(Sub):
    meat_ingredient = models.CharField(max_length=20, default="Meatball with Cheese")
    def __str__(self):
        return self.super().name

【问题讨论】:

    标签: python django oop django-models


    【解决方案1】:

    既然你扩展了Subname 也是TunaSubMeatballSub 的一个字段。所以你可以简单地使用

    def __str__(self):
        return self.name
    

    附带说明,由于您正在扩展一个具体模型,实际上您在数据库中创建了三个单独的表(名为 subtuna_submeatball_sub),它们通过一对一连接一关系。如果您只想重用sub 中的字段定义而不实际为其创建表,请使用abstract base model class

    【讨论】:

    • 非常感谢!好吧,事实上,我要再问一次附带的问题。
    • @bryansis2010 重申;您当前的方法没有任何内容,但您也在物理上分离数据库表。如果您不打算出现这种行为并且只想为您的子类创建两个表,那么请使用抽象 Sub 模型。您应该阅读我链接到的文档以进行更详细的讨论。
    猜你喜欢
    • 2015-08-27
    • 2011-08-16
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2020-05-25
    • 2021-05-24
    相关资源
    最近更新 更多