我正在建立一个数据模型。我希望每个模型都具有一些技术领域,例如:created
和updated
。我不喜欢将这些杂项添加到每个模型中(您知道...干)。
我尝试使用created
和updated
字段构建父类,并在其他模型中继承它,但是Django的ORM并未放置created
和updated
模型表中的字段,而是为这两个字段创建另一个表,并通过外键将其链接到模型。那不是我想要的。
有可行的方法吗?
答案 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
现在,当条目为created
(created
)时设置auto_now_add=True
,而当您...时为modified
。modified
条目({{ 1}})。
魔术是它的抽象类(doc here):
当您要将一些公共信息放入许多其他模型中时,抽象基类很有用。您编写基类,并将abstract = True放入Meta类。这样,该模型将不会用于创建任何数据库表。相反,当将其用作其他模型的基类时,会将其字段添加到子类的字段中。