下面是用于了解何时创建或修改Django对象的经典混合器:
class TimeStampable(models.Model):
created = models.DateTimeField(auto_now_add=True, editable=False)
modified = models.DateTimeField(auto_now=True)
class Meta:
abstract = True问题在于,created和modified字段在第一次创建时并不相等(在它们之间有一个微小的增量)。
您将如何改进这个混合器来解决这个特定的问题?
我检查了django-model-utils源代码,但一无所获。
我想我们需要重写__init__方法?
发布于 2017-11-29 15:17:07
如果希望两个时区对象相等,则必须及时创建完全相同的实例。这几乎是不可能的,特别是当您连续调用timezone.now()时。
本质上,在TimeStampable对象创建时发生的事情是:
created获得一个timezone.now实例。modified得到一个timezone.now,它是在created的时间分数之后创建的。我们可以重写模型的.save()方法来解决这个问题:
我们将使用模型的_state.adding()方法(这是ModelState的一个实例)来定义一个对象是否尚未保存(新创建的)。
timezone.now的一个(而且只有一个)实例,并将其传递给created和modified字段。timezone.now的一个实例传递给modified字段。
MyTimestampableModel类(时间戳):.def保存(self,*args,**kwargs):timezone_now = timezone.now()如果self._state.adding: self.created = timezone_now self.modified = timezone_now超级(MyTimestampableModel,self).save(*args,**kwargs)https://stackoverflow.com/questions/47474228
复制相似问题