일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 팬홀더
- 리액트강의
- 명령프롬프트
- pycharm
- 색상반전
- raspberry pi
- 비쥬얼 스튜디오
- SMB
- 게임으로놀면서웹사이트만들기
- 웹크롤링
- 고대비
- HTML Parse
- Docker
- 어두운
- K디지털기초역량훈련
- 야간
- 구글 클라우드 플랫폼
- 리스트뷰
- beautifulsoup
- GCP
- 국비지원교육
- CPU팬홀더
- Google Cloud Platform
- 데이원컴퍼니
- 라즈베리파이
- 동적
- Django
- 안구보호
- Google Cloud SQL
- CPU소켓
Archives
- Today
- Total
뚝딱쓱삭
Django : Model 정의하기 본문
반응형
1. Field생성 시 주요 argument
- max_length
- help_text : 도움말
- verbose_name : UI상에 나오는 이름
- default : 기본값
- null : True/False
- blank : True/False, blank허용여부 (필요시 null=True와 같이 쓰이기도)
- choices : 선택가능한 값
- primary_key : True일 경우 이 값을 primary key로 만듬
2. Field Type
docs.djangoproject.com/en/3.0/ref/models/fields/#model-field-types
- CharField : 고정길이 문자열. max_length를 반드시 할당해줘야함
- TextField : 긴 텍스트
- IntegerField : 정수
- DateField/DateTimeField : auto_now=True, auto_now_add, default옵션 사용가능
- EmailField : 이메일
- FileField/ImageField : 파일 및 이미지 업로드 용
- AutoField : IntegerField의 auto increment 용
- ForeignKey : foreign key 필드, on_delete옵션 사용가능
- 모델 자신에 foreign key를 걸어야할 때에는
models.ForeignKey('self', ......)로 처리
- ManyToManyField : on_delete옵션 사용가능
2-1. Forieng Key on_delete 옵션값
- CASCADE : 해당 모델의 인스턴스도 같이 삭제
- PROTECT : 삭제되지 않도록 ProtectedError 발생
- SET_NULL : 해당 ForeignKeyField를 Null로 바꿈 (null=True)일 때만 가능
- SET_DEFAULT : 미리 정해둔 Default 값으로 할당함
1
|
test = models.ForeignKeyField(TestModel, on_delete=models.SET_DEFAULT,default=DEFAULT_TEST_MODEL_PK)
|
cs |
출처 : lee-seul.github.io/django/backend/2018/01/28/django-model-on-delete.html
3. Meta Data
class Meta를 정의하여 모델의 메타데이타를 정의할 수 있음
예시 :
ordering = ['title', '-pubdate'] : title과 pubdate기준으로 정렬
4. QuerySet 함수 (레코드 찾아오기)
https://docs.djangoproject.com/en/3.0/ref/models/querysets/#django.db.models.query.QuerySet.get
- all()
- get( 조건 ) : 1개만 가져옴
- filter( 조건 ) : 조건에 맞는 레코드들을 모두 가져옴
- exclude( 조건 ) : 조건에 맞는 레코드 제외
- order_by() : 정렬하여 반환
- reverse() : 반환된 순서의 역순정렬하여 반환
- distinct() : SELECT DISTINCT하여 반환
- values() : model instance대신 dictionary로 반환
- values_list() : values와 같지만 dictionary가 아니라 tuple로 반환
- dates() :
- datetimes()
- union() : queryset 2개를 SQL UNION하는데 사용
- intersection() : queryset 2개를 SQL INTERSECT하는데 사용
- difference() : queryset 2개를 SQL EXCEPT하는데 사용
- select_related() : foreign key를 따라가서 query (SQL JOIN)
- prefetch_related() : select_related()와 목적은 비슷하지만 SQL JOIN을 쓰지 않고 2개의 query를 한후 JOIN을 python에서 처리
- extra() : 정상적인 queryset으로 모든걸 다 담을 수 없을 경우 추가로 사용
- defer() : 불필요한 필드를 query의 결과에서 제외
- only() : 특정 필드만 불러옴(defer()의 반대)
- using() : 복수의 DB사용 시 적용
- select_for_update() : SELECT ....FOR UPDATE 용도
- ll_books = Book.objects.all() : 해당 오브젝트 전체를 iterable로 가져옴
[예시]
- bestseller = Book.objects.get(title = '슬램덩크') : 1개값만 불러옴, 만일 값이 없으면 DoesNotExist를 띄우고, 여러개면 MultipleObjectsReturned를 띄움
- comic_books = Book.objects.filter(title__contains='comic') : 제목에 'comic'이 들어간것만 가져옴
- comic_books = Book.objects.exclude(title__contains='comic') : 제목에 'comic'이 들어간것만 제외
- comic_books = Book.objects.get(title__contains='comic') : 제목에 'comic'이 들어간것만 제외
- num_comic_books = comic_books.count() : comic_book의 숫자 반환
4-1. filter lookup
- 사용자에 따라 필터를 걸어야할 경우
- 모델명.objects.filter(필드명 = self.request.user) 로 처리
- Book.objects.filter(title__contains='comic') : title이 'comic'을 포함할 것 (case sensitive)
- Book.objects.filter(title__icontains='comic') : title이 'comic'을 포함할 것 (case insensitive)
- Book.objects.filter(title__exact='comic') : title이 'comic'일 것 (case sensitive)
- Book.objects.filter(title__iexact='comic') : title이 'comic'일 것 (case insensitive)
- Book.objects.filter(genre__in=['comic', 'SF', 'romantic']) : genre가 'comic', 'SF', 'romatic'중에 포함될것
- Book.objects.filter(id__gt=4) : id가 4보다 클것
- Book.objects.filter(id__gte=4) : id가 4이상일것
- Book.objects.filter(id__lt=4) : id가 4보다 작을것
- Book.objects.filter(id__lte=4) : id가 4이하일 것
- Book.objects.filter(title__startswith='slam') : 'slam'으로 시작할 것 (case sensitive)
- Book.objects.filter(title__istartswith='slam') : 'slam'으로 시작할 것 (case insensitive)
- Book.objects.filter(title__endswith='dunk')
- Book.objects.filter(title__iendswith='dunk')
- Book.objects.filter(date__range=(date1, date2)) : date1과 date2사이의 레코드 반환(SELECT ... BETWEEN ... AND ...)
- Book.objects.filter(title__isnull=True) : null인값만 반환
- Book.objects.get(title__regex=r'^(An?|The) +') : regex로 검색(case sensitive)
- Book.objects.get(title__iregex=r'^(An?|The) +') : regex로 검색(case insensitive)
- date, year, iso_year, month, day, week, week_day, quarter, time, hour, minute, second : 시간관련 조건
[실 사용례]
BookInstance.objects.filter(borrower=self.request.user).filter(status__exaxt='o').order_by('due_back')
4-1. queryset aggregation
- Sum()
- Avg()
- Count()
- Max() / Min()
- StdDev() / Variance()
반응형
'Web개발 > DJANGO' 카테고리의 다른 글
Django : Common Model활용하기 (0) | 2020.07.07 |
---|---|
Django : Form에서 현재 사용자 확인하기 (0) | 2020.07.03 |
Django 3.x App이름 바꾸기 (0) | 2020.06.22 |
Django REST Framework 간단설정 (0) | 2020.06.15 |
Django Permission (0) | 2020.06.13 |