Djangoの抽象ベースクラス

1815 ワード

  • Djangoのすべてのモデルはdjangoを継承する必要があります.db.models.Modelモデルは,直接継承でも間接継承でもよい.
  • 唯一決定する必要があるのは、親モデルが独立自主的であるかどうか、同じようにデータベースにデータテーブルを作成するモデルなのか、サブモデルの共有内容を保存するためにのみ使用され、実際にデータテーブルを作成しない抽象的なモデルなのかです.
  • Pythonの継承と同様に、Djangoも2つ以上の親を同時に継承することができます!

  • Djangoには3つの継承方法があります.
    -     :           Abstract base classes,            ,       ,           :  
    -     :Multi-table inheritance,              ;  
    -     :          Python     ,          ,        。
    
  • 具体的なアプリケーションは、モデルのMetaクラスにabstract=Trueメタデータ項目を追加するだけで、1つのモデルを抽象ベースクラスに変換することができます.Djangoはこの種類の実際のデータベーステーブルを作成しません.マネージャもなく、インスタンス化も直接保存もできません.継承に使用されます.抽象ベースクラスは完全にサブモデルたちが共有するコンテンツ部分を保存し,再利用の目的を達成するために用いられる.継承されると、フィールドはすべてサブモデルにコピーされます.次の例を見てください:
  •     from django.db import models
    
    class CommonInfo(models.Model):
        name = models.CharField(max_length=100)
        age = models.PositiveIntegerField()
        
        class Meta:
            abstract = True
        
    class Student(CommonInfo):
        home_group = models.CharField(max_length=5)  
    
    
    Student     name,age,home_group    ,  CommonInfo               ,Djiango
               。
    
  • 抽象ベースクラスのMateデータ
  •            Meta ,           Meta 。            Meta:
    
    from django.db import models
    
    class CommonInfo(models.Model):
        # ...
        class Meta:
            abstract = True
            ordering = ['name']
        
    class Student(CommonInfo):
        # ...
        class Meta(CommonInfo.Meta):
            db_table = 'student_info'
    
              :
    
    -           ,       ,    ;
    -           ,       ,    ;
    -             ;
    -       abstract=True          。                  ,          ,             Meta       abstract = True;
    -              ,  db_table,                ,                       。