와그 데이터 모델링 진행하기!

홍태경·2021년 5월 8일
0

wecode 프로젝트

목록 보기
3/5

초기 셋팅이 끝나면 이제 데이터 모델링을 하는 시간이다.
근데 너무너무 어렵다..
코에 걸면 코걸이 귀에걸면 귀걸이

일단 앱을 추가해준다

conda startapp products
conda startapp users

먼저 aquerytool로 이해를 하였고 그것을 이용해 products 앱에 models.py에 적용하였다
aquerytool은 넓게 스샷을 찍어도 보이지 않기에 여기에 넣지 않았다
https://aquerytool.com/

일단 초반에 너무 큰 어려움을 느껴 멘토님에게 말씀 드리니 우리는
와그 서울에 있는 숙소만 하라고 좁혀주셧다.

  1. 가장 상단에 카테고리를 이렇게 8 가지가 있고 이미지가 각각 들어있다

  2. 숙소를 클릭 하면 인기 여행지가 나온다 데스티네이션

  3. 원래는 숙소에서 카테고리를 바라보는게 보통이지만 여기 사이트에 카테고리들은 모두 여행지 정보들이 있다 그리고 하나의 여행지도 레스토랑, 숙소, 엑티비티를 가지고 있다 그래서 many to many 로 설정하였다

  4. 여행 사이트라면 역시 주소가 있어야 한다 그래서 우리는 구와 시 따로 테이블을 빼기로 하였다.

city(구)
District(시)

  1. 제품에 관한 테이블이다 우리는 외부 API를 이용하지않기에 상세 정보를 위주로 하였다.

  2. 제품에 사진이 한장 뿐이라면 제품 테이블에 컬럼에 추가 했을거지만
    여러장이 필요하길래 ProductImage 이라는 테이블을 따로 뺐다.

  1. ServiceCategory
    인터넷, 객실 시설, 호텔 시설, 서비스, 레크레이션, 주차

  2. 하나의 숙소에는 여러개의 서비스가 제공되고 서비스를 포함되는 호텔이 많다
    그래서 서비스와 숙소 간에 manytomany 로 하였다.

from django.db import models

class Category(models.Model):
    name      = models.CharField(max_length=45)
    image_url = models.URLField(max_length=2000)
    destination = models.ManyToManyField('Destination', through='CategoryDestination')

    class Meta:
        db_table = 'categories'

class Destination(models.Model):
    name      = models.CharField(max_length=45)
    image_url = models.URLField(max_length=2000)

    class Meta:
        db_table = 'destinations'

class CategoryDestination(models.Model):
    category    = models.ForeignKey('Category', on_delete=models.CASCADE)
    destination = models.ForeignKey('Destination', on_delete=models.CASCADE)

    class Meta:
        db_table = 'category_destinations'

class City(models.Model):
    name = models.CharField(max_length=45, null=True)

    class Meta:
        db_table = 'cities'

class District(models.Model):
    name = models.CharField(max_length=45)
    city = models.ForeignKey('City', on_delete=models.SET_NULL, null=True)

    class Meta:
        db_table = 'districts'

class Product(models.Model):
    name        = models.CharField(max_length=45)
    star_rating = models.SmallIntegerField(default=0)
    rating      = models.DecimalField(max_digits=3, decimal_places=1)
    description = models.TextField()
    address     = models.CharField(max_length=100)
    latitude    = models.DecimalField(max_digits=20, decimal_places=17)
    longitude   = models.DecimalField(max_digits=20, decimal_places=17)
    price       = models.DecimalField(max_digits=10, decimal_places=2)
    category    = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)
    destination = models.ForeignKey('Destination', on_delete=models.SET_NULL, null=True)
    city        = models.ForeignKey('City', on_delete=models.SET_NULL, null=True)
    district    = models.ForeignKey('District', on_delete=models.SET_NULL, null=True)
    convenience = models.ManyToManyField('Convenience', through='ProductConvenience')

    class Meta:
        db_table = 'products'

class ProductImage(models.Model):
    image_url = models.URLField(max_length=2000)
    product   = models.ForeignKey('Product', on_delete=models.SET_NULL, null=True)

    class Meta:
        db_table = 'product_images'

class Convenience(models.Model):
    name             = models.CharField(max_length=45)
    service_category = models.ForeignKey('ServiceCategory', on_delete=models.SET_NULL, null=True)

    class Meta:
        db_table = 'conveniences'

class ProductConvenience(models.Model):
    product     = models.ForeignKey('Product', on_delete=models.CASCADE)
    convenience = models.ForeignKey('Convenience', on_delete=models.CASCADE)

    class Meta:
        db_table = 'product_conveniences'

class ServiceCategory(models.Model):
    name = models.CharField(max_length=45)

    class Meta:
        db_table = 'service_categories'
profile
나의 에고를 인정하고 사랑하자

0개의 댓글