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 

派生クラスのオブジェクトがなくても修正フィールドの値を取得する方法はありますか?

編集:
固定フィールドにデータを格納することができないように見えるため、変数はデータベースに保存されません。そのような場合、私はマカブラの返事に従います。

+0

あなたに「延期属性」を与えるだろう、ここでは何もありません。しかし、あなたはsaveメソッドで 'self.modified'を設定するべきです。 –

+0

@Danielデータベース内のすべてのオブジェクトに独自の変更されたフィールドがあるとは限りませんか?代わりに、私はデータベース全体で実行された最新の変更の時間を保存するタイムスタンプを1つだけ持ちたいと思っています。 – 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) 
関連する問題