[1st project] 모델링

바울·2022년 7월 23일
0

1차 프로젝트 하면서 처음 보는 것도 많았고 2차 프로젝트를 대비해 하나씩 정리해 볼려고 한다.

User


일단 추가구현 사항을 제외하면 목표는 user모델링, cart모델링, product모델링 크게 이렇게 나뉜다. 일단 유저테이블 모델링은 이메일은 테이블에 하나이상 존재할 수 없게 하기위해 unique=True 함수를 사용해 하나이상 값이 테이블에 존재할 수 없게 해주었다. 그 외 패스워드는 암호화를 생각해서 길이를 넉넉하게 해주었다.

Cart


카트는 장바구니 즉 상품을 담는 테이블이기 때문에 상품을 담는 유저의 정보와 상품의 정보를 참조키로 가져오고 수량은 따로 설정해 주었다. default값을 0으로 주었는데 나중에 카트 view를 작성할때 default값을 1로 줄경우 유저가 요청한 수량에 +1을 한 값이 들어와서 고정값을 0으로 해주었다.

Product


상품에는 많은 정보가 들어가 있다. 일단 처음에 보이는 큰카테고리(Category) 그리고 그 카테고리 안에있는 subcategory 서브 카테고리에서 상품을 클릭하게 되면 상품에 상세정보가 나온다.(Product) 여기서 생각을 해보았다. 장바구니에 상품을 담을때 상품의 수량이나 사이즈마다 가격이 달라질텐데 이거는 어떻게 처리를 해야되지? 라는 생각이 들어서 ProductOption테이블을 따로 만들어 주어 상품의 사이즈마다의 가격을 입력해 두었다. price필드를 처음에는 integer필드를 사용했지만 실제로는 decimalfiedl를 많이 사용한다고 하기에 필드를 변경해 주었다. max_digits값은 최대자리 decimal_places은 소수점이 몇번째까지 사용할 수 있는지 설정해 주었다.

추상화 모델

기본적으로는 models.Model을 상속해서 테이블을 작성하지만 몇몇 테이블들은
TimeStampeModel을 상속해서 테이블을 작성한다. TimeStampeModel이 무엇이냐면 따로 만들어둔 추상화 모델 테이블에 이름이다. 유저 테이블이나 상품 테이블은 정보를 만든시간 업데이트된 시간이 필요하다. 그럴 경우에는 테이블에 밑에 코드를 사용할 수 있다.

models.DateTimeField(auto_now_add=True)
models.DateTimeField(auto_now=True)

테이블이 한두개 두세개만 이 코드를 사용한다면 그냥 입력해주면 될 것이다. 만약 100개의 테이블에 이 코드를 사용해야 한다면 많은 시간이 들고 코드도 지저분해 보일 수 있을 것이다. 그래서 추상화 모델을 따로 만들어 두어서 사용하는 것이다.

core라는 앱을 따로 만들어준후 models.py에 추상화 모델을 따로 만들어 주었다.

abstract = True

이 함수를 사용해주면 이 추상화 모델을 만들어둔 파일은 깃허브에 올라가지 않는다.

0개의 댓글