djangoシリーズ4-データベースフィールド制約


フィールド制約
フィールドコンストレイントは、データベースを構築するときに最もフィールドが行う追加のコンストレイントです.
(1)null:デフォルトはFalseであり、Trueに設定すると、このフィールドにデータを挿入するときに空になり、NULLを使用して入力できます.
(2)blank:デフォルトはFalseであり、Falseの場合はadminバックグラウンドでフォームに内容を記入する必要があり、Trueの場合はフォームを空にすることができます.一般的にnull=Trueまたはdefalutと連用されます.
(3)choices:重複可能なリストまたはメタグループ(基本単位は二元グループ)を受信する.このパラメータが指定されている場合、モデルをインスタンス化する場合、変数はリスト内の値のみを選択できます.
次のようになります.
class Person(models.Model):

  SHIRT_SIZES = (
        ('S', 'Small'),
       ('M', 'Medium'),
        ('L', 'Large'),
    )
  name = models.CharField(max_length=60)
  shirt_size = models.CharField(max_length=1,choices=SHIRT_SIZES)

(4)default:この変数の値は、値または呼び出し可能なオブジェクトであってもよく、呼び出し可能なオブジェクトの場合、モデルをインスタンス化するたびに呼び出されます.デフォルトは可変オブジェクト(モデルインスタンス、list、setなど)ではありません.このオブジェクトの同じインスタンスの参照として、すべての新しいモデルインスタンスのデフォルト値として使用されます.必要なデフォルト値を呼び出し可能にパッケージします.たとえば、デフォルトdictのJSOnFieldを指定する場合は、関数を使用します.
def contact_default():
   return {"email": "[email protected]"}
contact_info = JSONField("ContactInfo", default=contact_default)

(5)help_text:追加のヘルプテキストは、フィールドがフォームで使用されていない場合でも、ドキュメントの記録に役立ちます.
(6) primary_key:Trueに設定すると、モデルのプライマリ・キーとして初期設定されます.1つのモデルで、フィールドにprimary_が設定されていない場合key=Trueオプション.Djnagoには、プライマリ・キーとして設定するためのIntegerFieldフィールドが自動的に追加されます.したがって、デフォルトのプライマリ・キーを書き換えるような場合を除き、手動でプライマリ・キーを設定しないことができます.
(7)unique:Trueに設定した場合、このサブディビジョンはテーブル全体で値を一意に保つ必要があります.
(8)verbose_name:このフィールドの読みやすい名前.詳細名が指定されていない場合、Djangoはフィールドの属性名を使用して自動的に作成され、下線をスペースに変換します.この名前はadmin管理バックグラウンドに表示されます.
(9)db_colum:このフィールドに使用するデータベース・シーケンス名.指定されていない場合、Djangoはこのフィールドの名前を使用します.
(10)db_index:Trueの場合、このフィールドにデータベースインデックスが作成されます.
(11)db.tablespace:フィールドにインデックスが作成されている場合、フィールドに使用されるインデックスはデータベース表領域の名前です.デフォルトはプロジェクトのDEFAULT_です.INDEX_TABLESPACE設定(設定されている場合)、またはdb_tablespaceは、モデルの設定です(ある場合).バックエンドがインデックスの表領域をサポートしていない場合は、無視できます.PostgreSQLとOracleは表領域をサポートします.SQLiteとMySQLはサポートされていません.
(12)editable:Falseの場合、このフィールドは管理者または他の誰にも表示されません.モデル検証中にもスキップされます.デフォルトはTrueです.
(13)Error_Messages:パラメータは、フィールドが開始するデフォルトメッセージを上書きできます.上書きするエラーメッセージに一致するキーを含む辞書を渡します.エラーメッセージにはnull,blank,invalid,invalid_が含まれます.choice,unique,unique_for_date.
(14)unique_for_date:DateFieldまたはDateTimeFieldに設定される日付フィールドの値は一意です.フィールドがDateTimeFieldの場合、フィールドの日付部分のみが考慮されます.
(15)unique_for_month:このフィールドは月に対して一意であることが要求されます.
(16)unique_for_year:このフィールドは年に対して一意であることが要求されます.
(17)validators:このフィールドで実行するベリファイアのリスト.ベリファイアの例:
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_even(value):
  if value % 2 != 0:
      raise ValidationError(
           _('%(value)s is not an even number'),
          params={'value': value},
      )