<추후수정예정>
1) product <-> cart <-> user
2) product <-> wishlist <-> user
카트와 위시리스트라 동시에 프로덕트와 유저를 참조로하는 중간테이블이 된 상황
_다대다 관계 선언은 프로덕트 혹은 유저쪽에서 한번만 한다_
class Product(models.Model):
name = models.CharField(max_length = 100)
image_url = models.URLField()
series_id = models.ForeignKey('Series', on_delete = models.CASCADE)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
## 변수같은 의미. 똑같이 유저라고 하면 마지막 값으로 대체되기 때문에 변수같이 선언도 다르게, related_name도 다르게 // 다대다는 프로덕트나 유저 둘중 하나만 선언
# user = models.ManyToManyField('User', through = 'Cart' related_name = "")
# user = models.ManyToManyField('User', through = 'WishList' related_name = "")
cart = models.ManyToManyField('User', through = 'Cart', related_name = "")
wish_list = models.ManyToManyField('User', through = 'WishList', related_name = "")
그리고 중간테이블인 cart / wishlist 두 중간테이블에는 외래키를 넣어주되
이름을 다르게,(변수의 의미라고 생각하면 된다) + related_name 을 각각 넣어준다(임의지정)
####### (product) <-> (cart) <-> (user)
class Cart(models.Model):
count = models.CharField(max_length = 100)
created_at = models.DateTimeField(auto_now = True)
updated_at = models.DateTimeField(auto_now_add = True)
## 중간테이블인 카트 입장에선 프로덕트와 유저로 뻗어나가는게 포린키.
product = models.ForeignKey('Products', on_delete = models.CASCADE)
user = models.ForeignKey('Users', on_delete = models.CASCADE)
def __str__(self):
return self.name
class Meta:
db_table = "carts"
####### (product) <-> (whislist) <-> (user)
class WishList(models.Model):
## 중간테이블인 카트 입장에선 프로덕트와 유저로 뻗어나가는게 포린키.
product = models.ForeignKey('Products', on_delete = models.CASCADE)
user = models.ForeignKey('Users', on_delete = models.CASCADE)
def __str__(self):
return self.product.name
class Meta:
db_table = "wish_lists"