django의 모델 클래스 생성

5928 단어 django
모델 클래스 정의하기
  • 모델 클래스는'적용/models.py'파일에 정의됩니다.
  • 모델 클래스는 모델 클래스에서 계승해야 하며 패키지 django에 위치해야 한다.db.models에서

  • 이어 먼저'도서-영웅'관리를 예로 들어 시연한다.
    1 정의
    models에서 응용 booktest를 만듭니다.py 파일에서 모델 클래스를 정의합니다.
    from django.db import models
    
    #       BookInfo
    class BookInfo(models.Model):
        btitle = models.CharField(max_length=20, verbose_name='  ')
        bpub_date = models.DateField(verbose_name='    ')
        bread = models.IntegerField(default=0, verbose_name='   ')
        bcomment = models.IntegerField(default=0, verbose_name='   ')
        is_delete = models.BooleanField(default=False, verbose_name='    ')
    
        class Meta:
            db_table = 'tb_books'  #        
            verbose_name = '  '  #  admin        
            verbose_name_plural = verbose_name  #        
    
        def __str__(self):
            """             """
            return self.btitle
    
    #       HeroInfo
    class HeroInfo(models.Model):
        GENDER_CHOICES = (
            (0, 'male'),
            (1, 'female')
        )
        hname = models.CharField(max_length=20, verbose_name='  ') 
        hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='  ')  
        hcomment = models.CharField(max_length=200, null=True, verbose_name='    ') 
        hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='  ')  #   
        is_delete = models.BooleanField(default=False, verbose_name='    ')
    
        class Meta:
            db_table = 'tb_heros'
            verbose_name = '  '
            verbose_name_plural = verbose_name
    
        def __str__(self):
            return self.hname
    

    1) 데이터베이스 테이블 이름
    모델 클래스에 테이블 이름이 지정되지 않은 경우 Django는 기본적으로 소문자 app 응용 프로그램 이름소문자 모델 클래스는 데이터베이스 테이블 이름입니다.
    dbtable는 데이터베이스 테이블 이름을 가리킨다.
    2) 주 키 정보
    django는 테이블에 자동으로 증가하는 키열을 만들 것입니다. 모델마다 하나의 키열만 있을 수 있습니다. 옵션을 사용하여 특정한 속성을 키열로 설정하면 django는 자동으로 증가하는 키열을 만들지 않습니다.
    기본적으로 생성된 메인 키열 속성은 id입니다. pk로 대체할 수 있습니다. pk는 모두primary 키입니다.
    3) 속성 이름 지정 제한
  • python의 보존 키워드가 될 수 없습니다.
  • 연속 밑줄을 사용할 수 없습니다. 이것은django의 조회 방식에 의해 결정됩니다.
  • 속성을 정의할 때 필드 유형을 지정해야 한다. 필드 유형의 매개 변수를 통해 옵션을 지정하면 다음과 같은 문법이 있다.
      =models.    (  )
    
  • 4) 필드 유형
    타입
    설명
    AutoField
    자동으로 증가하는 IntegerField, 보통 지정하지 않아도 되며, 지정하지 않으면 Django는 자동으로 속성 이름이 id인 자동 증가 속성을 생성합니다
    BooleanField
    부울 필드(값은 True 또는 False)
    NullBooleanField
    Null, True, False 세 가지 값 지원
    CharField
    문자열, 매개 변수 maxlength는 최대 문자 수를 표시합니다
    TextField
    일반적으로 4000자 이상
    IntegerField
    정수
    DecimalField
    십진 부동 소수점 수, 매개 변수 maxdigits는 총 자릿수, decimal 매개변수를 나타냅니다.places는 소수점 자릿수를 나타낸다
    FloatField
    부동 소수점 수
    DateField
    날짜, 매개변수 autonow는 객체를 저장할 때마다 이 필드를 현재 시간으로 자동으로 설정합니다.'마지막 수정'의 시간 스탬프에 사용됩니다. 이 필드는 항상 현재 날짜를 사용하고 기본값은false입니다.매개 변수 autonow_add는 객체가 처음 작성될 때 현재 시간을 자동으로 설정하고 작성할 때 사용되는 타임 스탬프를 나타냅니다. 이 스탬프는 항상 현재 날짜를 사용하며 기본값은False입니다.매개 변수 autonow_add 및 autonow는 서로 배척, 조합 오류 발생
    TimeField
    시간, 매개 변수는 DateField와 같습니다.
    DateTimeField
    날짜 시간, 매개 변수는 DateField와 같습니다.
    FileField
    파일 업로드 필드
    ImageField
    FileField 에 상속되어 업로드된 내용을 검사하여 올바른 그림인지 확인
    5) 옵션
    옵션
    설명
    null
    True인 경우 허용이 비어 있음을 나타내며 기본값은 False입니다.
    blank
    True인 경우 필드는 공백으로 허용되며 기본값은 False입니다.
    db_column
    필드의 이름입니다. 지정하지 않으면 속성의 이름을 사용합니다.
    db_index
    값이 True이면 이 필드에 대한 색인이 테이블에 작성됩니다. 기본값은 False입니다.
    default
    묵인
    primary_key
    True인 경우 이 필드는 모델의 기본 키 필드가 되고 기본값은 False이며 일반적으로 AutoField 옵션으로 사용됩니다.
    unique
    True인 경우 이 필드는 테이블에 고유한 값이 있어야 합니다. 기본값은 False입니다.
    null은 데이터베이스 범주 개념이고 blank는 폼 검증 범주이다
    6) 외부 키
    외부 키를 설정할 때 on 을 통과해야 합니다delete 옵션은 메인 테이블에서 데이터를 삭제할 때 외부 키 인용 테이블 데이터를 어떻게 처리하는지 알려줍니다.django.db.models에는 다음과 같은 옵션 상수가 포함되어 있습니다.
  • CASCADE 캐스케이드, 마스터 테이블 데이터 삭제 시 키보드의 데이터를 연달아 삭제
  • PROTECT 보호, ProtectedError 이상을 던져서 메인 테이블에 외부 키로 적용된 데이터를 삭제하는 것을 막는다
  • SET_NULL이 NULL로 설정되어 있으며, 이 필드null=True에서 null로 허용되는 경우에만 사용할 수 있습니다
  • .
  • SET_DEFAULT는 기본값으로 설정되어 있으며, 이 필드에 기본값이 설정되어 있는 경우에만 사용할 수 있습니다
  • .
  • SET()를 특정 값으로 설정하거나
    from django.conf import settings
    from django.contrib.auth import get_user_model
    from django.db import models
    
    def get_sentinel_user():
        return get_user_model().objects.get_or_create(username='deleted')[0]
    
    class MyModel(models.Model):
        user = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.SET(get_sentinel_user),
        )
    
  • DO_NOTHING은 아무런 조작도 하지 않습니다. 데이터베이스 앞에 등급 연결을 표시하면 Integrity Error 이상
  • 을 던집니다.
    2 마이그레이션
    모델 클래스를 데이터베이스에 동기화합니다.
    1) 마이그레이션 파일 생성
    python manage.py makemigrations
    

    2) 데이터베이스에 동기화
    python manage.py migrate
    

    3 테스트 데이터 추가
    insert into tb_books(btitle,bpub_date,bread,bcomment,is_delete) values
    ('     ','1980-5-1',12,34,0),
    ('    ','1986-7-24',36,40,0),
    ('    ','1995-12-24',20,80,0),
    ('    ','1987-11-11',58,24,0);
    
    insert into tb_heros(hname,hgender,hbook_id,hcomment,is_delete) values
    ('  ',1,1,'     ',0),
    ('  ',0,1,'    ',0),
    ('   ',1,1,'    ',0),
    ('   ',1,1,'   ',0),
    ('   ',0,1,'     ',0),
    ('  ',1,2,'     ',0),
    ('  ',1,2,'    ',0),
    ('  ',1,2,'     ',0),
    ('   ',0,2,'    ',0),
    ('   ',1,3,'    ',0),
    ('   ',0,3,'  ',0),
    ('   ',1,3,'    ',0),
    ('    ',0,3,'    ',0),
    ('  ',1,4,'    ',0),
    ('   ',0,4,'  ',0),
    ('   ',0,4,'  ',0),
    ('   ',0,4,'   ',0);
    

    좋은 웹페이지 즐겨찾기