2014-11-06 3 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

를 살펴 보자 [장고 - stalefields] (https://github.com/zapier/django-stalefields) 또는 [장고 - dirtyfields] (https://github.com/dacresni/django-dirtyfields)를 추가하여 모델 믹스 인으로 지원합니다. – jonafato

답변

1

나는 최고의 솔루션을 장고 모델 pre_save 신호를 사용하는 것 같아요.

저장하기 전에 db의 인스턴스는 여전히 원본이지만 인스턴스 param에 새 값이 있으므로 필드가 변경되었는지 확인할 수 있습니다.

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' 
관련 문제