【问题标题】:Django and technical fieldsDjango 和技术领域
【发布时间】:2018-11-15 17:14:52
【问题描述】:
我正在构建一个数据模型。我希望每个模型都有一些技术领域,例如:created 和updated。我不喜欢将这些字段添加到每个模型中(你知道...... DRY)。
我尝试用created和updated字段构建一个父类,并在其他模型中继承它,但是Django的ORM并没有将created和updated字段放在模型的表中,相反,它为这两个字段创建另一个表,并通过外键将其链接到模型。那不是我想要的。
有没有可行的办法?
【问题讨论】:
标签:
python
django
django-orm
dry
【解决方案1】:
我做了很多次:
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 您的条目(auto_now=True)。
神奇的是,它是一个抽象类 (doc here):
当您想将一些通用信息放入许多其他模型中时,抽象基类很有用。您编写基类并将 abstract=True 放在 Meta 类中。该模型将不会用于创建任何数据库表。相反,当它用作其他模型的基类时,它的字段将添加到子类的字段中。