개발자 블로그

[DRF] Toy Project - 1. 기획 Model 본문

프로젝트/ToyProject[DRF] - 쇼핑몰

[DRF] Toy Project - 1. 기획 Model

hayongwoon 2022. 6. 21. 18:21

DRF  프로젝트 - 나만의 쇼핑몰

0. core

BaseModel(models.Model)

필드 설정 특이사항
updated_at models.DateTimeField(auto_now=True)  
created_at models.DateTimeField(auto_now_add=True)  

 

1. user

User(AbstractBaseUser)

필드 설정 특이사항
username models.CharField("이름")  
email models.EmailField("이메일 주소", unique=True) USERNAME_FIELD = 'email'
password models.CharField("비밀번호", max_length=128) max_length=128 해줘야한다. 패스워드 해시로 저장되면서 글자수가 약 88인가로 설정되는 문제 때문
usertype models.CharField(max_length=100, choices=TYPE_CHOICES) 일반 사용자와 판매자(브랜드)를 나눌 예정
user_rating models.IntegerField(default=1) 유저 등급에 따라 permission custom
is_active models.BooleanField(default=True) False일 경우 계정 비활성화
is_admin models.BooleanField(default=False) is_staff에서 해당 값을 사용
join_date models.DateTimeField("가입일", auto_now_add=True)  

 

2. product

Product(models.Model)

필드 설정 특이사항
productname models.CharField("제품명")  
brand(판매자) models.ForiegnKey(to=User, on_delete=models.CASCADE) related_name, verbose_name 설정
category models.ForiegnKey(to=Category) related_name, verbose_name 설정
thumbnail models.ImageField(upload_to)  
instroduction models.CharField("제품 소개")  
avg_rating models.FloatField("평점")  
like_cnt models.IntegerField("좋아요 수")  
register_date models.DateTimeField("등록일", auto_now_add=True)  
end_exposure_date models.DateTimeField("노출 종료일")  
price models.IntergerField("가격")  
is_active models.BooleanField(default=True)  

 

ProductCategory(models.Model)

필드 설정 특이사항
category_name models.CharField("제품 종류")  

 

3. product_review

ProductReview(BaseModel)

- prodcut(제품 N:1), 작성자(유저 N:1), content, 작성일자, 수정일자, product_rating(제품 만족도 점수)

필드 설정 특이사항
prodcut models.ForiegnKey(to=Product, on_delete=models.CASCADE)  
user models.ForiegnKey(to=User, on_delete=models.CASCADE)  
content models.TextField("내용")  
product_rating models.IntergerField("만족도") 5점 만점

 

4. product_review_comment

ProductReviewComment(BaseModel)

- review(댓글 N:1), 작성자(유저 N:1), content, 작성일자, 수정일자

필드 설정 특이사항
review models.ForiegnKey(to=Review, on_delete=models.CASCADE)  
user models.ForiegnKey(to=User, on_delete=models.CASCADE)  
content models.TextField("내용")  

 

5. product_like

ProductLike(BaseModel)

필드 설정 특이사항
user models.ForiegnKey(to=User, on_delete=models.CASCADE) class Meta:
        constraints = [
            models.UniqueConstraint(fields=["user", "product"], name="unique_user_product"),
        ]
product models.ForiegnKey(to=Product, on_delete=models.CASCADE)

 

4. product_bookmark(장바구니)

ProductBookmark(BaseModel)

필드 설정 특이사항
user models.ForiegnKey(to=User, on_delete=models.CASCADE) class Meta:
        constraints = [
            models.UniqueConstraint(fields=["user", "product"], name="unique_bookmark"),
        ]
product models.ForiegnKey(to=Product, on_delete=models.CASCADE)