jango - ManyToManyField

ManyToMany 필드를 사용하는 이유

중간 모델을 쓰는 것보다 many to many field를 쓰면 좋은 점이 무엇일까? 성능상의 이점에 대해선 여러가지 장점이 있을 수도 있겠지만 내가 이해한 부분은 한가지다. 바로 개발할 때 유지보수의 편리함이다.

class Pizza(models.Model):
	name = models.CharField
	toppings = models.ManyToManyField('Topping')
    
class Topping(models.Model):
	name = models.CharField

Django에서 생성된 인스턴스들을 저장하면 데이터베이스에도 저장이 된다.
ManyToManyField를 왜 쓸까요? 해당 필드를 사용하면 다대다 관계의 테이블을 쉽게 정의할 수 있습니다. 위의 예시에서 보이듯이 피자와 토핑이 연결되고, 소스와 타겟 모델이 다르다.

클래스가 3개에서 2개로 줄어든다는 것은 큰 이점이 있는데요. 그 부분에 문제가 생겼을 때 개발자가 디버깅 시 보아야하는 코드의 양이 줄어듭니다. 그리고 클래스를 3개로 만든다고 해서 더 성능이 좋아지거나 커지는 것은 아닙니다.

ManyToMany 필드를 역참조하는 관계에서는 클래스가 해당 필드를 가지고 있진 않지만 해당 클래스를 참조하는 클래스의 이름을 B라고 할 때, b_set를 속성으로 갖습니다. ManyToMany 필드에서는 related_name을 가지고 있는데요.
본인이 원하는 이름으로 커스터마이징 할 수 있습니다. Pizza_set보다 pizzas가 더 직관적이지 않습니까? *_set의 형태보다 이것이 훨씬 더 직관적입니다.

References

  1. Tips for Using Django's ManyToManyField - (https://www.revsys.com/tidbits/tips-using-djangos-manytomanyfield/)

좋은 웹페이지 즐겨찾기