Django - Field Types, Options


本明細書では、Fieldはデータベース・テーブルのカラム(column)を表します.

Field Types


CharField


制限された文字列フィールドのタイプを指定する必要があります.最大長はmax_lengthです.
name = models.CharField(max_length=25)

TextField


大きな文字列を持つフィールドで、長さは制限されません.
description = models.TextField()

IntegerField


整数フィールド
num 		 = models.IntegerField() # (4bytes)범위
positive_num = models.PositiveIntegerField() # 양수
big_num 	 = models.BigIntegerField() # (8bytes)범위

DecimalField


小数点を持つフィールド.max_digitsは、数字の中の虚栄の最大桁数decimal_places以上でなければならない.decimal_placesは、数字とともに格納される小数点以下の桁数である
mg = models.DecimalField(max_digits=5, decimal_places=3)
# 소숫점 이하 3자리수의 숫자까지 99개 까지 저장하기 20.142표현 가능

BooleanField


True、Falseフィールド、
Null値を受け入れるには、NullBooleanFieldを使用する必要があります.
ox = models.BooleanField(default=False)

DateTimeField


日付と時刻のフィールド
日付フィールドのみ:DateField時間のみ:TimeField現在の日付は、auto_now_add=Trueが最初に保存されたときにのみ適用されます.
保存ごとにauto_now=True回、現在の日付に更新
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=Ture)
date = models.DateField()
time = models.TimeField()

URLField


URLフィールド
主に画像URLを挿入し、max_lengthを設定できます
img_url = models.URLField(max_length=500)

Field Options


null


Null値がNullのオプションを受け入れます.デフォルトはFalseです.
name = models.CharField(null=True)

blank


空の値を許可するオプション、デフォルト値はFalse
name = models.CharField(blank=True) 
blank=True vs null=True null=Trueは、フィールドの値をnullとして格納することを可能にする.blank=Trueでは、フィールドをフォーム(入力フォーム)から空に保存できます.null=Trueおよびblank=Trueが指定されている場合は、任意の条件で値を空白にすることができることを示します.

default


デフォルトのオプションの指定
name = models.CharField(default=null)

unique


ユニークな値のみを持つように設定できるオプションです.
name = models.CharField(unique=True)

validators


認証を支援するオプション.
フォーマットはvalidators=[validate_method]
def validate_phone(value):
    regex = re.compile(r'(\d{3}).*(\d{4}).*(\d{4})')
    if not regex.match(value):
        raise ValidationError(message= 'validate_phone')
        
        
phone = models.CharField(max_length= 50, validators = [validate_phone])

on_delete


ForeignKeyで見た値が削除されたときに、これらの要素をどのように処理するかを設定します.
# CASCADE : 모델 인스턴스도 같이 삭제
child = models.ForeignKey('Parent', on_delete=models.CASCADE)

# PROTECT : 해당 요소가 같이 삭제 되지 않도록 ProtectedError발생
child = models.ForeignKey('Parent', on_delete=models.PROTECT)

# SET_NULL : ForeignKey값을 null로 바꿈, null=True일 때만 사용 가능
child = models.ForeignKey('Parent', on_delete=models.SET_NULL, null=True)

# SET_DEFAULT : ForeignKey값을 default로 바꿈, default가 있을때만 사용 가능
child = models.ForeignKey('Parent', on_delete=models.SET_DEFAULT, default=0)

through


ManyToManyFiledで使用するモデルを指定できます
class Tag(models.Model):
    name = models.CharField(max_length=100)


class Book(models.Model):
    title = models.CharField(max_length=100)
    tags  = models.ManyToManyField('Tag', through='BookTag')


class BookTag(models.Model):
    book = models.ForeignKey('Book', on_delete=models.CASCADE)
    tag  = models.ForeignKey('Tag', on_delete=models.CASCADE)

    class Meta:
        db_table = '생성된 ManyToMany Table 이름'
        
その後、テーブルが既に存在するため、migrate --fakeが実行される.
BookTagモデルを使用してアクセスします.

Metaオプション


Metaオプションは、メタデータをInnerクラスとして親に提供します.
Meta data(メタデータ):データから生成されるデータ
class Table(Models.Model):
	number = IntegerField()
	price  = IntegerField()
    
    class Meta:
    	# number 필드는 내림차순, price 필드는 오름차순으로 정렬
    	ordering = ['number','price']
        
        # 이 클래스는 추상클래스의 base가 됩니다
        abstarct = True
        
        # DB테이블 이름을 지정
        db_table = 'tables'