Django,如何仅在更改一个特定属性时更新 DateTimeField 属性
Django, How to update DateTimeField attribute only when one specific attribute is changed
我想仅在属性 Customer
更改时更新属性 date_assigned
。我知道我必须在同一个模型中覆盖保存功能,但我不知道具体怎么做。
class Ip(models.Model):
customer = models.ForeignKey(Customer, null=False, on_delete=models.CASCADE)
ip = models.GenericIPAddressField(protocol="IPv4", null=False, unique=True)
date_created = models.DateTimeField(auto_now_add=True,)
date_updated = models.DateTimeField(auto_now=True,)
date_assigned = models.DateTimeField(auto_now=True)
有什么想法吗?提前致谢。
请阅读 docs 关于覆盖保存方法的内容。
model_utils 包中有一个非常有用的工具。
from model_utils import FieldTracker
class Ip(models.Model):
customer = models.ForeignKey(Customer, null=False, on_delete=models.CASCADE)
ip = models.GenericIPAddressField(protocol="IPv4", null=False, unique=True)
date_created = models.DateTimeField(auto_now_add=True,)
date_updated = models.DateTimeField(auto_now=True,)
date_assigned = models.DateTimeField()
customer_tracker = FieldTracker(fields=['customer'])
def save(self, *args, **kwargs):
if self.customer_tracker.changed():
self.date_assigned = timezone.now()
super().save(*args, **kwargs)
我想仅在属性 Customer
更改时更新属性 date_assigned
。我知道我必须在同一个模型中覆盖保存功能,但我不知道具体怎么做。
class Ip(models.Model):
customer = models.ForeignKey(Customer, null=False, on_delete=models.CASCADE)
ip = models.GenericIPAddressField(protocol="IPv4", null=False, unique=True)
date_created = models.DateTimeField(auto_now_add=True,)
date_updated = models.DateTimeField(auto_now=True,)
date_assigned = models.DateTimeField(auto_now=True)
有什么想法吗?提前致谢。
请阅读 docs 关于覆盖保存方法的内容。
model_utils 包中有一个非常有用的工具。
from model_utils import FieldTracker
class Ip(models.Model):
customer = models.ForeignKey(Customer, null=False, on_delete=models.CASCADE)
ip = models.GenericIPAddressField(protocol="IPv4", null=False, unique=True)
date_created = models.DateTimeField(auto_now_add=True,)
date_updated = models.DateTimeField(auto_now=True,)
date_assigned = models.DateTimeField()
customer_tracker = FieldTracker(fields=['customer'])
def save(self, *args, **kwargs):
if self.customer_tracker.changed():
self.date_assigned = timezone.now()
super().save(*args, **kwargs)