我正在学习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代码行并允许我将大多数模型类视为通用类型。
答案 0 :(得分:1)
不是愚蠢地使用抽象类。 Django和python都是相对一夫多妻的,因为它们允许你使用许多不同的编程风格(无论哪一种最适合你)。只需确保您正在做出一致且有意识的决定,即模型是否创建单独的表,每个表都有自己的重复列副本,或者它们是否都包含对公共基表的ForeignKey。