개발자 블로그
[DRF] Toy Project - 1. 기획 Model 본문
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("이름") | |
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) |