Django:如何创建自定义“base”mod

2024-04-28 23:10:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在我几乎所有的表(=类的models.Model)中,我有三个DateTimeField

  • 创造
  • 有效期开始
  • 有效期结束

有没有一种方法可以让我声明这些字段的“基本”模型类,并使我的所有其他模型都扩展这个类?我在网上找不到有价值的答案。在


Tags: 方法答案模型声明modelmodels价值有效期
2条回答
class Basetable(models.Model):

   created_on = models.DateTimeField(auto_now_add=True)
   modified_on = models.DateTimeField(auto_now=True)
   created_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='%(class)s_createdby')
   modified_by = models.ForeignKey(settings.AUTH_USER_MODEL,
                                related_name='%(class)s_modifiedby', null=True, blank=True)

   class Meta:
       abstract = True

这样您就可以定义模型并将Basetable扩展到其他模型类

您需要创建一个具有这些公共字段的抽象基类,然后在模型中继承这个基类。

第1步:创建Abstract Base Class

我们首先创建一个名为BaseModel的抽象基类。这个BaseModel类包含3个模型字段creation_datevalididity_start_date和{},它们几乎在你的每个模型中都很常见。在

在内部的Meta类中,我们设置abstract=True。然后,此模型将不用于创建任何数据库表。相反,当它被用作其他模型的基类时,它的字段将被添加到子类的字段中。在

class BaseModel(models.Model):  # base class should subclass 'django.db.models.Model'

    creation_date = models.DateTimeField(..) # define the common field1
    validity_start_date = models.DateTimeField(..) # define the common field2
    validity_end_date = models.DateTimeField(..) # define the common field3

    class Meta:
        abstract=True # Set this model as Abstract

第2步:在模型中继承这个基类

在创建抽象基类BaseModel之后,我们需要在模型中继承这个类。这可以像在Python中那样使用普通继承来完成。在

^{pr2}$

这里,MyModel1MyModel2类包含基类creation_datevalididity_start_date和{}三个字段,而基类中定义的其他模型字段除外。在

相关问题 更多 >