2017-02-15 4 views
0

私はビジネスロジックを備えたいくつかのモデルを定義する必要があるプロジェクトに取り組んでいます。たとえば、dbからフェッチするときにデータを処理する方法です。関数をオーバーライドするためだけにdjangoモデルを継承する方法は?

同じ親モデルから複数のモデルを継承したいと思います。各モデルでは、特定の機能をオーバーライドします。私は機能をオーバーライドするだけで、フィールドを追加しないため、新しいモデルごとに新しいテーブルを作成することは望ましくありません。これを達成する方法は?

データベースオブジェクトから適切なクラスを取得できないため、プロキシモデルが役に立たない。

例: -

class ParentModel(models.Model): 
    f1=fields.IntegerField() 

    def processing_func1(self): 
     <default func1 functionality> 

    def processing_func2(self): 
     <default func2 functionality> 

class ChildModel1(models.Model): 

    def processing_func1(self): 
     <overridden func1 functionality> 

class ChildModel2(models.Model): 

    def processing_func2(self): 
     <overridden func2 functionality> 

私は、子モデルがParentModelを介してアクセスする必要があります。たとえば、ParentModel.objects.all()を実行すると、私はChildModelのオブジェクトを取得します。通常のモデル継承では、私はdjango-model-utilsを使用してそれを達成しています。

+2

「データベースオブジェクトから適切なクラスを取得できません」とはどういう意味ですか? ChildModelをプロキシとして定義すると、親モデルのようにデータベースを扱うことができます。あなたのケースに合わせてプロキシモデルが必要です。 – Raz

+0

https://docs.djangoproject.com/en/1.10/topics/db/models/#proxy-models – abrunet

+0

ParentModelからアクセスできるように子モデルが必要です。たとえば、ParentModel.objects.all()を実行すると、私はChildModelのオブジェクトを取得します。通常のモデル継承では、ParentModel.object.select_subclasses()と言ってdjango-model-utilsを使用して達成しています –

答えて

0

何が必要なのここでのミックスインで、抽象クラスを作るには、Djangoのモデルからこのような

何かをプロパティを継承します。

class UtilMixin(models.Model): 

    def processing_func1(self): 
     <default func1 functionality> 

    def processing_func2(self): 
     <default func2 functionality> 

    class Meta: 
     abstract = True 


class ChildModel1(UtilMixin): 

    def processing_func1(self): 
     <overridden func1 functionality> 

class ChildModel2(UtilMixin): 

    def processing_func2(self): 
     <overridden func2 functionality> 
+0

これは私の新しいクラスごとに新しいテーブルを作成します。 –

+0

ああ申し訳ありませんが私の答えは、この1つの関連性があります。 –

関連する問題