TIL DAY 23 || [배민스토어 Project DAY 3 21.03.17]

TK·2021년 3월 17일
2

Project

목록 보기
2/6

프로젝트 1일차 2일차가 너무 바빴다.

1, 2일차 모두 모델 ERD를 짜느라 정신없이 흘러갔다.
3일차인 오늘 마지막으로 ERD 리뷰를 받고 드디어 django 의 models.py 를 app 별로 작성하였다.

개요

주제 : 배민문방구 홈페이지 클론

팀원 : 프론트엔드 3(최송희, 김미현, 홍래영 님) / 백엔드 2(김택향, 안다민 님)

21.03.15 ~ 03.17

  • scrum 방식으로 작업하기 위한 Trello 세팅
  • django 초기세팅
  • AqueryTool 로 ERD 모델링 완료
  • models.py 작성 완료

세부사항

scrum work 를 위한 Trello 세팅 & 작업 추가

  • 라벨로 프론트/백 구분
  • 메인기능_세부단위 로 업무 세분화
  • 티켓마다 작업자 및 due date 추가
  • Backlog / This week / In Progress / Done 으로 work flow 분류
  • 프론트와 데이터 key 값을 공유하기 위한 tap 을 추가

django 초기세팅

  • 초기 세팅(필요없는 app 주석처리 및 corsheaders 설정)

  • 보안 관련 gitignore 설정 + requirement.txt 추가

    requirement.txt의 기능 : 클론하면 상대방이 했던 pip 작업까지 모두 클론할 수 있는 기능

  • 초기세팅 완료 후 feature/models 브랜치 생성

AqueryTool ERD

  • 노란 화살표로 표시한 부분은 many to many 중개모델이다.
  • 상품에 대한 옵션을 중분류 카테고리마다 분류할까 생각했었다. 양말 같은 경우에는 모두 같은 옵션을 가지고 있었지만, 다른 것들은 모두 상이한 옵션을 가지고 있었기 때문에 options 테이블에 모든 상품 옵션을 넣고 products 테이블과 many to many 관계로 지정했다.

특이사항 :

  • 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 로 모든 품목을 검색한다.
  • reviews 테이블이 order 테이블을 참조하게 해서
  • order 하나에 대한 review 를 수월하게 관리할 수 있도록 구조를 만들었다.

models.py

  • 앱 구성 : user, product, order
  • 커밋 단위 : 앱 별 수정사항 반영

기타 공부할 점 및 특이 사항

  • many to many 관계 (User&Coupon, Coupon&SubCategory, Product&Option)
  • recursive many-to-many 관계 설정
    (Product 안에 recommendation instance 지정, symmetrical=True로 지정하여 양방향 관계 설정)
  • one-to-one 관계 설정 이유와 장점에 대해 공부하기

마주했던 ERROR

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 로 변경

profile
Backend Developer

0개의 댓글