728x90
배경
Django에 상품에 카테고리를 지정하려고 했습니다.
상품에는 카테고리가 N개 지정이 가능하고 카테고리에서도 상품이 N개 지정 가능한 N:N관계가 만들어집니다
처음에 Foreign Key로 만들어서 prefetch를 통해서 원하는 값들을 가져오는 방안을 떠올랐습니다.
그러면 상품에서 원하는 카테고리 값들을 가져오고 싶을때 모든 상품에서 해당 카테고리에 속해있는 것을 훑어보는 작업이 필요합니다
그러한 이유로 카테고리에도 상품을 참조해야하는데 N:N이면 ManyToMany를 지정해 Django에서 자동으로 pk가 담긴 중간 테이블을 만들어줍니다.
그러나 자동으로 만들게 되면 비즈니스 로직 상 좋지 않은 결과를 초래합니다. 예를들어 설정 시각이나 이유(예시입니다)를 적어야 할 시 칼럼 추가가 어렵기 때문입니다.
그렇기에 명시적으로 ManyToMany Table을 만들어주는 편이 좋습니다.
코드
class ProductCategory(BaseModel):
class Meta:
verbose_name = '상품, 카테고리 관계 테이블'
product = models.ForeignKey(to='Product', on_delete=models.CASCADE)
category = models.ForeignKey(to='Category', on_delete=models.CASCADE)
배운 점
ManyToMany의 필요성과 우회 방법
through를 통해서 django에서 만들어주지 않고 해당 테이블을 통해서 관계가 설정됩니다
'Django > model' 카테고리의 다른 글
[Django] related_name 자동 참조 (1) | 2024.03.18 |
---|---|
[Django] 날짜 형식 체크 (0) | 2024.03.04 |