모델
- 클래스 모델을 생성하여 자동으로 데이터 베이스를 다루도록 한다.
- 모델에 메서드가 추가될 때는 makemigrations와 migrate를 수행할 필요가 없다.
- makemigrations, migrate 는 모델의 속성이 변경되었을때 실행해야 한다.
(admin.py)
#모델을 admin에 등록
from django.contrib import admin
#동일한 위치의 models 파일의 UserModel을 불러옴
from .models import UserModel
# UserModel을 Admin에 추가
admin.site.register(UserModel)
(settings.py)
#가장 하단에 추가
# 기본 장고의 사용자 모델을 (user앱의 UserModel)로 변경
AUTH_USER_MODEL = 'user.UserModel'
(models.py)
from django.db import models
from django.contrib.auth.models import AbstractUser
# models.Model : 자동생성 없이 하나씩 변수를 설정
# AbstractUser : 장고에서 제공하는 기본 유저 모델
class UserModel(AbstractUser):
#DB 테이블의 이름을 지정해주는 정보
#데이터베이스에 정보를 넣어주는 역할
class Meta:
db_table = "my_user"
#AbstractUser 사용시 아래 내용은 입력하지 않아도 됨
#CharField, DateTimeField 어떤 형태로 DB에 들어갈지 설정
#username = models.CharField(max_length=20, null=False)
#password = models.CharField(max_length=256, null=False)
#created_at = models.DateTimeField(auto_now_add=True)
#updated_at = models.DateTimeField(auto_now=True)
#외래키로 UserModel을 가져오면 username이 반환
def __str__(self):
return self.username
Django 모델 필드의 종류
- 문자열 : CharField, TextField
- 날짜/시간: DateTimeField, DateField, TimeField
- 숫자 : IntegerField, FloatField
- 외래키 : ForeignKey
ForeignKey (외래키)
- 다른 모델과 연결하기 위해 사용한다.
- on_delete=models.CASCADE는 이 답변과 연결된 상위 데이터가 삭제될 경우 하위 데이터도 함께 삭제한다는 의미이다.
class Product(models.Model):
class Meta:
db_table = "product"
username = models.ForeignKey(UserModel, on_delete=models.CASCADE)
description = models.TextField(max_length=256, default='')
quantity = models.IntegerField(default=0)
makemigrations와 migrate 차이
makemigrations : 모델을 생성하거나 모델에 변화가 있을 경우에 실행해야 하는 명령이
migrate : DB 테이블 생성
장고 셸
모델이 변경될 때마다 셸을 재시작해야 함
python manage.py shell
데이터 조회
filter와 get
# username에 고양이라는 문자열이 포함되어 있는지 검사
UserModel.objects.filter(username__contains='고양이')
UserModel.objects.get(id=1)
filter : 조건에 해당하는 데이터를 모두 QuerySet으로 리턴한다.
filter 사용법 참조 : https://docs.djangoproject.com/en/4.0/topics/db/queries/
get : 유일성을 갖는 데이터(ex. id)를 조회할 때 사용한다. UserModel 객체를 리턴한다.
# Product 모델 id가 1인 데이터에 연결된 username을 가져오기
product = Product.objects.get(id=1)
product.username
# 반대로 UserModel에 연결된 product의 데이터를 가져올 수 있다.
user = UserModel.objects.get(id=5)
user.product(연결모델명)_set.all()
데이터 수정
# user id 2를 가져와 username을 고양이로 수정하고 저장하기
user_id = UserModel.objects.get(id=2)
user_id.username = '고양이'
user_id.save()
데이터 삭제
# id 4인 데이터를 삭제하기
user_id = UserModel.objects.get(id=4)
user_id.delete()
'Python > Django' 카테고리의 다른 글
05. Django 템플릿 (0) | 2023.04.10 |
---|---|
04.5 Django 관리자 (0) | 2023.04.09 |
03. Django URL (0) | 2023.04.07 |
02. Django 프로젝트와 앱 (0) | 2023.04.05 |
01. Django 기초 (0) | 2023.04.05 |