2016-10-14 5 views
0

내 모델에서는 마지막 데이터베이스 수정에 대한 정보를 저장하는 추상 기본 클래스를 만들었습니다. 이렇게하려면 메서드를 저장합니다. 여기서 정적 datetime 필드는 현재 시간으로 업데이트됩니다.
마지막 수정 시간을 가져 오려고하면 DeferredAttribute 객체가 반환되며, 발견 한 값을 가져 오는 유일한 방법은 인스턴스화 된 객체에서 해당 필드를 호출하는 것입니다. 그러나 데이터베이스의 모든 개체가 삭제되면이 방법으로 값을 읽을 수 없습니다.추상 클래스 정적 필드 값 가져 오기

class Timestamp(models.Model): 
    modified = models.DateTimeField(null=True) 

    def save(self, *args, **kwargs): 
     Timestamp.modified = timezone.now() 
     super(Timestamp, self).save(*args, **kwargs) 

    class Meta: 
     abstract = True 


class Node(Timestamp): 
    latitude = models.FloatField(default=0.0) 
    longitude = models.FloatField(default=0.0) 

# ... 
# few more subclasses of Timestamp 

파생 클래스 객체를하지 않고 수정 필드 값을 얻을 수있는 방법이 있나요?

편집 :
고정 필드에 데이터를 저장할 수없는 것처럼 보이므로 수정 된 변수는 데이터베이스에 절대로 저장되지 않습니다. 그런 경우 나는 McAbra의 대답을 따를 것입니다.

+0

당신에게 "연기 속성을"줄 것이다 거기에 아무것도 여기. 하지만 save 메소드에서'self.modified'를 설정해야합니다. –

+0

@Daniel 데이터베이스의 모든 개체가 자체 수정 된 필드를 갖지 않을까요? 대신 전체 데이터베이스에서 수행 된 최신 변경 시간을 저장하는 타임 스탬프가 하나만 필요합니다. – tomwyr

+0

이제 당신이하려는 일을 정말로 이해하지 못합니다. 데이터베이스에 저장하지 않고 어떻게 가치를 유지할 수 있습니까? 서버 프로세스를 다시 시작하면 어떻게됩니까? –

답변

1

당신은 간단하게 할 수 있습니다

class Timestamp(models.Model): 
    created_at = models.DateTimeField(auto_add=True) 
    updated_at = models.DateTimeField(auto_add_now=True) 

    class Meta: 
     abstract = True 


class Node(Timestamp): 
    latitude = models.FloatField(default=0.0) 
    longitude = models.FloatField(default=0.0) 
관련 문제