2017-01-21 17 views
1

私は、特定のクラスが一時的でも永続的でもよいユースケースを持っています。一時インスタンスは、PUT呼び出しのJSONペイロードから構築され、サーバー呼び出し中にデータベースに保持されるか、または使用され、返されるか破棄されます。この場合のベストプラクティスは何ですか?私のオプションがあるように見える:Djangoモデルインスタンスの一時的な使用

  • 書き込み2つの models.Modelサブクラスであるそのうちの一つのクラス、およびその他のではない、と彼らは同じAPIを実装して作る、または
  • 使用Modelサブクラスですが、save()を呼び出さないように注意してください。

Djangoモデルの従来の使用法に従って、これらのいずれかが望ましいですか?

答えて

0

できるだけDRYとして残るためには、あなたのモデルを導出する抽象モッククラスかもしれない:あなたが(でもAから継承されたメソッドで)どこにでもそれにsaveを呼び出す場合でも、今

class A(models.Model): 
    # fields'n'stuff 

class TransientA(A): 
    def save(*args, **kwargs): 
     pass # avoid exceptions if called 

    class Meta: 
     abstract = True # no table created 

を、あなたは空白を撮影するでしょう。

0

あなたは両方が必要になります:何のテーブルは単に親クラスのために作成されるべきでないようにinheritantsはまだ、具体的なモデルであるべき場合

abstract = Trueが有用です。 multi-table inheritanceをオプトアウトして、代わりに継承テーブルに複製された共有属性を代わりに使用することができます(abstract base inheritance)。

managed = Falseは、継承するクラスを決して永続化しない場合に便利です。 Djangoの移行やフィクスチャは、このためのデータベーステーブルを生成しません。

class TransientModel(models.Model): 
    """Inherit from this class to use django constructors and serialization but no database management""" 
    def save(*args, **kwargs): 
     pass # avoid exceptions if called 

    class Meta: 
     abstract = True # no table for this class 
     managed = False # no database management 

class Brutto(TransientModel): 
    """This is not persisted. No table app_brutto""" 
    #do more things here 
    pass 
関連する問題