본문 바로가기
Web Framework/Django

[Django] Model 및 Database 2

by cogito21_python 2024. 4. 22.
반응형
 Index
 1. Model 관계
 2. Database 설정
 3. Model 기본 관리자
 4. Model 커스텀 관리자
 5. 4
Reference

1.  Model 관계

Model 관계

- django.db.models

models.ForeignKey(to=모델, on_delete=models.CASCADE, related_name='blog_posts')
- to: 연결할 모델
- on_delete: 참조된 객체가 삭제될 때 선택할 수 있는 동작 지정.
- related_name: 모델끼리의 역방향 관계 명칭 지정

 

- 일대일 관계

 

- 일대다 관계

 

- 다대다 관계

 

2. Database 설정

Database 설정

- settings.py의 DATABASE 설정

 

3.  Model 기본 관리자

Model 기본 관리자

- 기본 관리자 objects를 통해 QuerySet 객체를 반환

- Django의 Queryset은 lazy 특성을 가지고 있어 필요할 때만 실행

- Queryset 평가 시점: Queryset 첫 반복시 / pickle 또는 캐시할 때 / 명시적으로 list() 호출 / 명령문에서 체크할 경우

from .models import 모델

# 객체 생성
변수 = 모델()

# 객체 생성후 DB 저장
모델.objects.create(필드=...)

# 객체 수정
변수.필드 = '값'

# DB 반영
변수.save()

# 객체 삭제
변수 = 모델.objects.get(조건)
변수.delete()

 

- 객체 조회

# 전체 객체 반환
모델.objects.all()

# 단일 객체 탐색
모델.objects.get(조건)
- 실패시 DoseNotExist 예외 발생
- 둘 이상 반환시 MultipleObjectReturned 예외 발생

# 필터링
모델.objects.filter(조건).filter(조건)
- 룩업 메서드가 있는 쿼리는 필드__필드 형태로 작성

# 특정 결과 제외
모델.objects.filter(조건).exclude(조건)

# 정렬 결과 반환
모델.objects.order_by('필드')

 

4. Model 커스텀 관리자

Model 커스텀 관리자

- 기본 관리자에 관리자 메서드를 추가

- 관리자가 반환하는 초기 QuerySet 수정하여 새로운 관리자를 생성

- get_queryset() 메서드에 overriding하여 커스텀 QuerySet 지정

from django.db import models

class 필드Manager(models.Manager):
  def get_queryset(self):
    return super().get_queryset().filter(조건)
  
class 모델명(models.Model):
  관리자명 = 필드Manager()

 

 

5. 

 

 


Reference

[Text: Django(Model Field Foreign Key)]
https://docs.djangoproject.com/en/5.0/ref/models/fields/#foreignkey
[Text: Django(Model)]
https://docs.djangoproject.com/en/5.0/topics/db/models/
반응형

'Web Framework > Django' 카테고리의 다른 글

[Django] View  (0) 2024.04.22
[Django] Admin  (0) 2024.04.22
[Django] Model 및 Database 1  (0) 2024.04.21
[Django] Project 및 Application  (0) 2024.04.21
[Django] Django 개요 및 환경 설정  (0) 2024.04.21