국내 최초 전통주 술 정기 구독 서비스 쇼핑몰, 술담화를 클론하기로 하였다!
쇼핑몰은 로그인, 회원가입, 장바구니 등 기본적인 구현 사항들이 모두 충족되기에 첫 클론 프로젝트로 적합한 사이트라고 생각했다!
https://www.sooldamhwa.com/
첫번째 프로젝트인 만큼 기능에 욕심을 부리기보단, 기본에 충실한 사이트를 만들어 기본기를 단단하게 다지는 시간을 갖기로 하였다!!!!!!!!!
categories
술담화 사이트는 탁주 / 약.청주 / 과실주 / 증류주 총 4가지 카테고리로 분류하였지만,
우리 팀은 편의상 소주 / 맥주 / 위스키 / 와인 / 막걸리 로 분류하기로 하였다!
taste, finger_food
상세페이지에 핵심포인트로 나와있는 맛, 안주는 product가 아닌 categories 별로 분류하여
ex ) 맥주 > 안주 : 치킨, 맛 : 탄산 8, 산미 6, 담백 4 이런식으로 그래프화하여 int로 넣어주기로 하였다.
제일 고민되었던 테이블은 price 였는데,
1. 가격별로 범위를 지정해서 (ex)0원 ~ 만원 / 만백원 ~ 이만원) 데이터베이스에 넣어주어야 할까?
2. price 테이블을 따로 빼서 products와 cart와 연결 해주어야 할까?
고민을 하다
products에 가격을 넣어주고 cart에서 받아주기로 했다.
(왜 돈 관련한 데이터는 DOUBLE, FLOAT를 쓰면 안 될까?)
-> float와 double은 우리가 돈을 위해 사용하는 기본 10 배수를 정확하게 나타낼 수 없기 때문에 DecimalField를 사용해야한다!!!!!!!!!!!
10 진수 표현으로, python에서 Decimal 인스턴스로 나타냄
class Product(models.Model):
size = models.IntegerField(max_length=100)
description = models.CharField(max_length=100)
price = models.DecimalField(max_digit=8, decimal_place=2)
#최대 금액 100,000원 (6자리) / 소수점 둘째자리까지 구현
on_delete 옵션은 Django에서 모델을 구현할 때 데이터베이스 상에서 참조무결성을 유지하여 ForeignKeyField가 바라보는 값이 삭제될 때 해당 요소를 처리하는 방법을 지정
class명은 컨벤션상 camelcase로 작성한다!
중요한 걸 대문자로!!
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
null : DB와 관련된다! database column이 null 값을 허용하느냐 아니냐를 결정.
blank : Form에 대한 유효성과 관련! 반드시 입력해야하는지 아닌지를 결정.
수정 전
updated_at
단순히 변수명만 변경해준 것이었다.
core app 생성 후 각 model에 있는 created_at과 updated_at을 삭제하면 된다!
수정후
class TimeStampModel(models.Model):
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
class Meta:
abstract = True