django manytomani 관계

다음으로 전송:http://yilee.info/many-to-many-relationship-in-django.html
Django 의 다 중 관 계 는 Many ToMany Field 필드 유형 을 통 해 이 루어 집 니 다. 공식 문서 의 예 는 다음 과 같 습 니 다. 아래 모델 에서 Pizza 와 Topping 은 다 중 관계 입 니 다.

   
   
   
   
  1. class Topping(models.Model): 
  2.     title=models.CharField(max_length=30
  3. class Pizza(models.Model): 
  4.     title=models.CharField(max_length=30
  5.     toppings=models.ManyToManyField(Topping) 

다음은 토 핑 과 피 자 를 각각 추가 하 겠 습 니 다.

  
  
  
  
  1. topping=Topping(title='test_title'
  2. topping.save() 
  3. pizza=Pizza(title='test_title'
  4. pizza.save() 

그러나 이 는 토 핑 과 피 자 를 각각 추가 할 수 있 지만 이들 사이 에는 관련 이 없다.다음 세상 둘 의 관계.

  
  
  
  
  1. #  
  2. pizza.toppings.add(topping) 
  3. #  
  4. topping.pizza_set.remove(pizza) 

아래 와 같이 사용:

  
  
  
  
  1. # topping pizza 
  2. topping.pizza_set.all() 
  3. # pizza topping 
  4. pizza.toppings.all() 

template 에서 다음 과 같이 인쇄 합 니 다:

  
  
  
  
  1. {\% for topping in pizza.toppings.all %\} 
  2. {\% endfor %\} 

WordPress 의 글 과 태그 의 다 대 다 관 계 를 생각해 보면 쉽게 이 루어 질 수 있 습 니 다.
한 장의 표 에서 외 키 가 같은 표를 가리 키 는 필드 수가 2 보다 많 을 때 구분 하기 위해 related 를 사용 해 야 합 니 다.name, 예 를 들 면:

  
  
  
  
  1. class Pizza(models.Model): 
  2.     title=models.CharField(max_length=30
  3.    toppings1=models.ManyToManyField(Topping,related_name="toppings1"
  4.    toppings2=models.ManyToManyField(Topping,related_name="toppings2"

relatedname 후 "set "와 같은 검색 은 relatedname 이 대체 되 었 기 때문에 더 이상 set 를 사용 할 수 없습니다.
또 하나의 방법 은 Many ToMany Field 필드 의 through 매개 변 수 를 제정 하여 중개 모델 을 정의 하고 이들 의 관 계 를 위해 중개 class 를 새로 만 드 는 것 입 니 다. 데이터 베이스 에 두 사람의 id 를 저장 합 니 다.

  
  
  
  
  1. class Topping(models.Model): 
  2.     title=models.CharField(max_length=30
  3. class Pizza(models.Model): 
  4.     title=models.CharField(max_length=30
  5.     toppings=models.ManyToManyField(Topping,through='relation'
  6.                                     related_name='toppings'
  7. #  
  8. class Relation(models.Model): 
  9.     topping=models.ForeignKey(Topping) 
  10.     pizza=models.ForeignKey(Pizza) 

이렇게 하면 아래 의 방식 으로 양자 관 계 를 저장 할 수 있다.

  
  
  
  
  1. relation=Relation(topping=topping,pizza=pizza) 
  2. relation.save() 

다른 사용 은 위 와 마찬가지 로 실제 개발 은 두 번 째 방식 을 사용 하 는 것 이 비교적 뚜렷 하지만 더 많은 데이터 베이스 조회 작업 을 하여 효율 에 영향 을 줄 수 있다.

좋은 웹페이지 즐겨찾기