프로젝트 1일차 2일차가 너무 바빴다.
1, 2일차 모두 모델 ERD를 짜느라 정신없이 흘러갔다.
3일차인 오늘 마지막으로 ERD 리뷰를 받고 드디어 django 의 models.py 를 app 별로 작성하였다.
초기 세팅(필요없는 app 주석처리 및 corsheaders 설정)
보안 관련 gitignore 설정 + requirement.txt 추가
requirement.txt의 기능 : 클론하면 상대방이 했던 pip 작업까지 모두 클론할 수 있는 기능
초기세팅 완료 후 feature/models 브랜치 생성
특이사항 :
- orders 테이블, order_status 및 carts 테이블을 동시에 관리한다.
- 예를들어서 장바구니에 물품이 추가되면 order_id 를 바로 생성하고 order_status 값을 '구매전' 으로 처리한다.
- 주문을 하면 order_status 를 변경한다.
- 물품이 새로 담기면 새로운 orders 테이블에서 새로운 row 를 생성하고, 생성된 order_id 와 carts 를 연결한다.
- 카트 담긴 물건을 삭제하면 carts 테이블에서 해당 row 를 delete 한다. (원래는 delete 하지 않고 새로운 table 을 만들고 정보관리 차원에서 지우려는 데이터들을 백업하려고 했지만, 그렇게 되면 2주 프로젝트에 너무 타이트하기 때문에 생략했다.)
- 예를들어 카트에 세개 중 두개만 주문을 했으면 그 즉시 나머지 하나의 품목에 새로 생성된 order_id 를 연결한다.
- orders 테이블에 order_status 가 '구매전' 인 row 는 딱 하나이다.
- 유저가 담은 모든 카테고리를 가져올 때 orders 테이블로 가서 '구매전' 인 row 의 order_id 를 가져와서, carts 에서 해당 order id 로 모든 품목을 검색한다.
from django.db import models
class User(models.Model):
username = models.CharField(max_length=30, unique=True)
password = models.CharField(max_length=100, unique=True)
email = models.EmailField(max_length=128, unique=True)
phone_number = models.CharField(max_length=11, unique=True)
address = models.CharField(max_length=100)
postal_code = models.CharField(max_length=5)
detailed_address = models.CharField(max_length=30)
point = models.DecimalField(max_digits=10, decimal_places=2)
class Address(models.Model):
address = models.CharField(max_length=100)
postal_code = models.CharField(max_length=5)
detailed_address = models.CharField(max_length=30)
user = models.ForeignKey('User', on_delete=models.CASCADE)
ERRORS:
user.Address.user: (fields.E303) Reverse query name for 'Address.user' clashes with field name 'User.address'.
HINT: Rename field 'User.address', or add/change a related_name argument to the definition for field 'Address.user'.
해결책 : Address 모델명을 DeliveryAddress 로 변경