实现标准字段的最佳方法是什么,我希望Django模型中的所有类都有?
选项1是在父类中创建标准字段,然后让每个类继承该类。例如:
选项2是创建一个具有与其他类具有复合关系的标准字段的类。例如:
选项3只是在每个希望使用它们的类中复制这些字段(这违反了Django的DRY原则)。例如:
对于备注字段以及创建的和上次修改的日期时间(以及将来的用户ID),哪个是最佳的?我显然希望将这些字段用于审计目的,这意味着它们将以某种方式显示在Django Admin中。在帮助我确定哪种方法最佳时,请记住这一点。
答案 0 :(得分:4)
您的问题表明您希望构建一个抽象类,以用作模型继承的基类。有一些非常好的文档here。
例如:
class CommonInfo(models.Model):
notes = models.TextField(blank=True, null=True)
created_at = models.DateTimeField(blank=True, default=datetime.datetime.now)
last_modified_at = models.DateTimeField(blank=True, default=datetime.datetime.now)
class Meta:
abstract = True # This line is what makes the class an abstract class
def we_all_do_this(self):
pass
def we_all_do_this_too(self):
pass
class ChildA(CommonInfo): # Note that ChildA class inherits from the CommonInfo abstract base class
name = models.CharField(blank=True, null=True, max_length=100)
state = models.CharField(blank=True, null=True, max_length=100)
def only_i_do_this(self):
pass
class ChildB(CommonInfo): # Note that ChildB class inherits from the CommonInfo abstract base class
title = models.CharField(blank=True, null=True, max_length=100)
date = models.DateField(default=datetime.datetime.today)
def only_i_do_this(self):
pass
答案 1 :(得分:1)
我认为这个问题没有正确的答案,但如果它是我希望在项目中所有模型中实现的必修字段,我会采用父类方法。
即你的选择1。