如何檢查模型中某個(gè)字段發(fā)生改變

兩種方法檢查模型中某個(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容