Models and databasesフィールド

5541 ワード

モデルは、データに関する単一の、最終的なデータソースです.格納されたデータの基本フィールドと動作が含まれます.通常、各モデルは単一のデータベース・テーブルにマッピングされます.
  • modelごとに十数個がdjangoを継承する.db.models.ModelのPythonサブクラス
  • 各モデルのプロパティは、データベース内のフィールド
  • を表す.
  • Django操作データベースのAPI
  • Quick example
    from djiando.db import models
    class Person(models.Model):
          first_name = models.CharField(max_lenght=30)
          last_name = models.CharField(max_length=30)
    first_name last_name Person   ,            
    

    以上のPersonクラスは次のSQL文に相当します.
    CREATE TABLE myapp_person(
        'id' serial NOT NULL PRIMARY KEY
        'first_name' varchar(30) NOT NULL
        'last_name' varchar(30) NOT NULL
    )
    Django        ( )       myapp  Django App       App        
    
                 (       )
    python manage.py makemigrations
    python manage.py migrate
    

    Fields(フィールド)フィールドを定義する際に、clean、save、deteleなどのDjangoのmodel APIのキーワード(メソッド、属性など)が競合しないでください.モデル内のフィールドタイプはすべてFieldクラスのインスタンスです(一般的にはCharFieldなどのFieldクラスのサブクラスが使用されます).Field typesを正しく選択すると、データに格納されているフィールドのタイプ(INTEGER、VARCHARなど)が決まります.
    1、models.AutoField      = int(11)
            ,           id   ,              ,           primary_key=True。
    2、models.CharField       
         max_length   
    3、models.BooleanField      =tinyint(1)
          ,Blank=True
    4、models.ComaSeparatedIntegerField          =varchar
        CharField,     max_lenght   
    5、models.DateField       date
          ,auto_now = True              ;auto_now_add           ,         。
    6、models.DateTimeField       datetime
       DateField   
    7、models.Decimal          = decimal
             max_digits    decimal_places
    8、models.EmailField       (       ) =varchar
                 
    9、models.FloatField       = double
    10、models.IntegerField    
    11、models.BigIntegerField     
      integer_field_ranges = {
        'SmallIntegerField': (-32768, 32767),
        'IntegerField': (-2147483648, 2147483647),
        'BigIntegerField': (-9223372036854775808, 9223372036854775807),
        'PositiveSmallIntegerField': (0, 32767),
        'PositiveIntegerField': (0, 2147483647),
      }
    12、models.IPAddressField       (ip4     )
    13、models.GenericIPAddressField       (ip4 ip6    )
        protocol   :both、ipv4、ipv6
         ,       
    14、models.NullBooleanField           
    15、models.PositiveIntegerFiel   Integer
    16、models.PositiveSmallIntegerField   smallInteger
    17、models.SlugField    、   、  、  
    18、models.SmallIntegerField    
              :tinyint、smallint、int、bigint
    19、models.TextField     =longtext
    20、models.TimeField     HH:MM[:ss[.uuuuuu]]
    21、models.URLField     ,       
    22、models.BinaryField     
    23、models.ImageField     
    24、models.FilePathField   
    

    Field optionsフィールドオプション各フィールドには、CharFieldおよびそのサブクラスなどの特定のフィールドのパラメータのセットがあり、少なくとも1つのmax_を渡す必要があります.lengthのパラメータは、対応するデータベース内のvarcharの長さとして使用されます.各フィールドには、データベースの設定と密接に関連する一般的なオプションを設定できます.一般的な設定項目は次のとおりです.
  • null Trueの場合、DjangoはこのフィールドにNULLを格納することを許可し、デフォルトはFalse
  • である.
  • blankこのフィールドが空白の内容を受け入れるかどうか、デフォルト値はFalse blankとnullの意味が異なり、blankは値に関連しており、blank=Trueがこのフィールドが空白の値を受け入れることができることを示す場合、Falseがこのフィールドを表す場合は
  • を記入する必要があります.
  • choicesが選択した方法このフィールドの候補値
  • が最も多い.
            
    YEAR_IN_SCHOOL_CHOICES=(
      ('FR','Freshman'),
      ('SO','Sophomore'),
      ('JR','Junior'),
      ('SR','Senior'),
      ('GR','Graduate'),
    )
    
    from django.db import models
    class Person(models.Model):
          SHIRT_SIZES=(
              ('S','Small'),
              ('M','Medium'),
              ('L','Large'),
          )
          name = models.CharField(max_length=60)
          shirt_size = models.CharField(max_lenth=1,choices= SHIRT_SIZES)
    
    >>>p = Person(name='Fred',shirt_size='L')
    >>>p.save()
    >>>p.shirt_size
    'L'
    >>>p.get_shirt_size_display()
    'Large'
    
  • default設定フィールドのデフォルト値
  • help_textフィールドのヘルプ情報
  • primary_keyデータテーブルのプライマリ・キーを設定し、デフォルトFalse
  • from django.db import models
    class Fruit(models.Model):
          name = models.CharField(max_length=100,primary_key=True)
    >>>f = Fruit.objects.create(name='Apple')
    >>>f.name = 'Pear'
    >>>f.save()
    >>>f.objects.values_list('name',flat=True)
    >>>['Apple','Pear']
      flat=True              。        
    
  • uniqueサブフィールドが一意の値であるかどうかを設定する
  • Automatic primary key fieldsデフォルトのDjangoモデルごとにデフォルト自動増分プライマリ・キーを設定
    id = models.AutoField(primary_key=True)
    

    Verbose field names各filed type(ForeignKey,ManyToManyField and OneToOneFieldを除く)は、最初のパラメータでverbose nameのアクセス者が読める名前を設定し、Webページに表示することができます.verbose_name設定の場合.デフォルトはフィールド応答のプロパティ名です(下線はスペースで置き換えられます).
    first_name = models.CharField("person's first name",max_length=30)
    >>>   verbose_name     person's first name
    first_name = models.CharField(max_length=30)
    >>>verbose_name     first name
    

    ForeignKey,ManyToManyField and OneToOneFieldなどverbose nameの設定はkeywordで設定する必要があります
    poll = models.ForeignKey(Poll,on_delete=models.CASCADE,verbose_name='the related poll',)
    
    auto_now   auto_now_add (        )
      auto_now       ---       ,         
      auto_now_add      ---         
    db_column           
    db_index = True       
    editable=True   Admin      
    error_messages=None      
    auto_created=False      
    validators=[]             
    upload-to