是否适合使用Django的抽象类来简化代码重用?

时间:2017-02-08 00:58:05

标签: python django oop model

我正在学习Django并编写我的第一个半复杂模型。我的许多表都是以类似的视图样式制作的,因此许多对象都有名称,描述和图像。例如:

class Ingredient(models.Model):
    # Standard to many classes
    name = models.CharField(max_length=50)
    description = models.TextField()
    image_url = models.URLField(max_length=200)

    # Unique to this class
    foodgroup = ..... etc.

由于名称,描述和url对于许多对象是通用的(否则完全不同),我正在考虑定义每个可以继承的基类:

class BaseObjectWithImage(models.Model):
    # Standard to many classes
    name = models.CharField(max_length=50)
    description = models.TextField()
    image_url = models.URLField(max_length=200)

    class Meta:
        abstract = True

class Ingredient(BaseObjectWithImage):        
    # Unique to this class
    foodgroup = ..... etc.

我的问题 - 可能更接近简单的OOP最佳实践问题 - 是否这是对Django抽象类的愚蠢使用,或者是否值得剥离3xN代码行并允许我将大多数模型类视为通用类型。

1 个答案:

答案 0 :(得分:1)

不是愚蠢地使用抽象类。 Django和python都是相对一夫多妻的,因为它们允许你使用许多不同的编程风格(无论哪一种最适合你)。只需确保您正在做出一致且有意识的决定,即模型是否创建单独的表,每个表都有自己的重复列副本,或者它们是否都包含对公共基表的ForeignKey。