兩種方法檢查模型中某個(gè)字段發(fā)生改變
How to check if a filed has changed when model save
Django 2.1.7
1. 在模型中檢查
適用于在任何時(shí)候字段發(fā)生變化采取動(dòng)作
class Task(models.Model):
if_done = models.BooleanField('If Done', default=False)
__original_done = None
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# inital original
self.__original_done = self.if_done
def save(self, *args, **kwargs):
if not self.__original_done and self.if_done:
# if_done changed, do something
super().save(*args, **kwargs)
# update the original
self.__original_done = self.if_done
2. 在 Admin Class 中檢查
適用于只在使用admin的時(shí)候檢查字段變化,
由于寫(xiě)在了admin class 里,所以如果有其他views 修改了改model,檢查是不起作用的。
利用 Form.changed_data 值檢查
class TaskAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if 'if_done' in form.changed_data:
messages.info(request, "The task status has changed")
else:
messages.info(request, "The task status has not changed")
super().save_model(request, obj, form, change)