2014-11-06 60 views
0

我想查看我的標題字段是否在保存方法中更改。這是我到目前爲止:如何查看模型保存方法中是否更改了字段

class Answer(models.Model): 
    title = models.CharField(max_length=200) 
    description = models.TextField() 

    def save(self, *args, **kwargs): 
     if self.pk: 
      answer_prev = Answer.objects.get(pk=self.pk) 
      if answer_rev.title != self.title: 
       log.info('TITLE HAS CHANGED!!') 

有沒有更好的方法來做到這一點?

+1

看看[Django的stalefields](https://github.com/zapier/django-stalefields)或[django的-dirtyfields](https://github.com/dacresni/django-dirtyfields )以此作爲模型mixin添加對此的支持。 – jonafato 2014-11-06 18:25:53

回答

1

我認爲最好的解決方案是使用django模型pre_save信號。

保存之前,db中的實例仍然是原始實例,但實例參數具有新值,因此您可以檢查一個字段是否已更改。

from django.db import models 
from django.dispatch import receiver 

@receiver(models.signals.pre_save, sender=Answer) 
def prepare_save(sender, instance, **kwargs): 
    try: 
     current_instance = sender.objects.get(pk=instance.pk) 
     if current_instance.title != instance.title: 
      print 'Title changed to %s!' % instance.title 
    except sender.DoesNotExist: 
     print 'new answer. No title change'