Django和技术领域

时间:2018-11-15 17:14:53

标签: python django django-orm dry

我正在建立一个数据模型。我希望每个模型都具有一些技术领域,例如:createdupdated。我不喜欢将这些杂项添加到每个模型中(您知道...干)。

我尝试使用createdupdated字段构建父类,并在其他模型中继承它,但是Django的ORM并未放置createdupdated模型表中的字段,而是为这两个字段创建另一个表,并通过外键将其链接到模型。那不是我想要的。

有可行的方法吗?

1 个答案:

答案 0 :(得分:2)

我做了多次:

class TimeStampedModel(models.Model):
    """
    An abstract base class model that provides self-
    updating 'created' and 'modified' fields
    """

    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

对于其他型号:

from core.models import TimeStampedModel

class MyClass(TimeStampedModel):
    """
    CLASS LAMBDA
    """
    field = models.DecimalField(verbose_name=u"Name", max_digits=7, decimal_places=2)
    field2 = models.CharField(verbose_name=u"Name 2", max_length=200)

现在在ipython中:

from bundle.models.my_class import MyClass
item = MyClass.objects.first()
print item.created 

现在,当条目为createdcreated)时设置auto_now_add=True,而当您...时为modifiedmodified条目({{ 1}})。

魔术是它的抽象类(doc here):

  

当您要将一些公共信息放入许多其他模型中时,抽象基类很有用。您编写基类,并将abstract = True放入Meta类。这样,该模型将不会用于创建任何数据库表。相反,当将其用作其他模型的基类时,会将其字段添加到子类的字段中。