django-4. 모델 - 심화

테이블 이름

Django는 자동으로 생성 된 데이터 베이스 엑세스 api를 제공한다. 각 모델은 django.db.models.Model 이라는 하위 클래스임. 그래서 models.py에서 models를 import 함(from django.db import models).

	from django.db import models

	class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

위와 같이 모델을 만들면 데이터 베이스에는 blogapp이름_person 이라는 테이블이 생성 된다. 이는 메타데이터에서 자동으로 파생 되지만 재정의 할 수 있음.

django meta option 보기

필드

django에는 수십가지의 model필드가 있음. 참조할 수 있는 모델 필드 보기

그중에 자주 사용하는 몇가지만 정리.


AutoField (integerField)

django는 모델을 생성하면 id 필드를 primary_key로 생성해줌. (필요한 경우 재정의 할 수 있음.)

	id = models.AutoField(primary_key=True)

비슷한 애들.. : BigAutoField, BigIntegerField


BooleanField

  • ture, false를 받음.
  • null값을 받을 필요가 있으면 NullBooleanField를 대신 사용
  • 기본 위젯은 checkbox

CharField(max_length=없음, options)

  • 문자열필드
  • 많은양의 텍스트를 사용하려면 TextField
  • 기본위젯 TextInput

CharField.max_length

  • 필드의 최대길이 유효성 검사에서 사용

DateField ( auto_now = false, auto_now_add = false, options )

  • DateField.auto_now : 객체가 저장될 때 마다 자동으로 설정
  • DateField.auto_now_add : 객체 생성 시 필드를 설정함.
  • auto_now와 auto_now_add는 함께 사용하지 않도록 함.
  • 기본위젯 TextInput

EmailField ( max_length = 254 , ** options )

  • max_length 유효성 검사에 사용 됨.

TextField ( options )

  • 기본 위젯 Textarea
  • max_length 속성을 지정하면 위젯에는 반영되지만 데이터베이스 스준에서는 적용되지 않음.

관계필드

ForeignKey ( to , on_delete , ** options )

	 manufacturer = models.ForeignKey(
        'production.Manufacturer',
        on_delete=models.CASCADE,
    )
  • N:1 관계
  • on_delete

  • CASCADE() (외래키가 포함된 객체도 함께 삭제)
  • PROTECT() (ProtectedError의 하위 클래스를 올려서, 참조된 개체의 삭제를 방지) < - 무결성 에러
  • SET_NULL() (외래키를 null로 설정)
  • SET_DEFAULT()
  • SET()
  • DO_NOTHING()

ManyToManyField

  • N:M 관계 (다대다)
  • 장고는 이를 표현하기 위해서 중간 조인 테이블을 생성함.

.. 작성중.. ㅌ