簡體   English   中英

django 'auto_now' 如何忽略指定字段的更新

[英]how django 'auto_now' ignore the update of specified field

我有一個模型,像這樣:

    name = models.CharField(max_length=255)
    modify_time = models.DateTimeField(auto_now=True)
    chasha = models.CharField(max_length=255)
    stat = models.CharField(max_length=255)

通常,當我更新 'name'、'chasha'、'stat' 字段時,'modify_time' 將被更新。 但是,我只是不想在更新“stat”時更新“modify_time”。 我該怎么做?

謝謝。

使用自定義保存方法通過查看以前的實例來更新字段。

from django.db import models
from django.utils import timezone as tz


class MyModel(models.Model):
    name = models.CharField(max_length=255)
    modify_time = models.DateTimeField(null=True, blank=True)
    chasha = models.CharField(max_length=255)
    stat = models.CharField(max_length=255)

    def save(self, *args, **kwargs):
        if self.pk: # object already exists in db
            old_model = MyModel.objects.get(pk=self.pk)
            for i in ('name', 'chasha'): # check for name or chasha changes
                if getattr(old_model, i, None) != getattr(self, i, None):
                    self.modify_time = tz.now() # assign modify_time
        else: 
             self.modify_time = tz.now() # if new save, write modify_time
        super(MyModel, self).save(*args, **kwargs) # call the inherited save method

編輯:像上面一樣從modify_time刪除auto_now ,否則它將在 save 方法中設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM