2012-06-08 3 views
3

갤러리 필드를 쓰고 있습니다. 필드 서브 클래스는 ManyToManyField이며 고유 한 Ajax 위젯을 추가합니다. 이 솔루션을 최대한 작게 만들고 싶습니다 (가능한 한 다른 프로젝트에서이 코드를 다시 구현하는 코드를 작성하고 싶습니다).Django ManyToMany 제네릭 "through"모델

class IntermediateModel(models.Model): 
    from_content_type = models.ForeignKey(ContentType) 
    from_object_id = models.PositiveIntegerField() 
    from_content_object = generic.GenericForeignKey('from_content_type', 'from_object_id') 
    to_content_type = models.ForeignKey(ContentType) 
    to_object_id = models.PositiveIntegerField() 
    to_content_object = generic.GenericForeignKey('to_content_type', 'to_object_id') 
    order = models.PositiveIntegerField() 

다음 질문 발생 :

  1. 인가

    나는 주문 정보를 개최, (즉,이 ManyToManyField에 매개 변수 '를 통해'제공) 중간 테이블을 만들하기로 결정했습니다 django에서 m2m에 대한 "통과"모델을 가질 수 있습니다. 위와 같은 일반적인 관계를 가리키는 두 개의 외래 키가 있습니다. 그렇다면 어떻게 이것을 달성 할 수 있습니까?

  2. 이렇게 할 수 있다면 - 그러한 모델이 둘 이상의 m2m 필드간에 일반적인 관계를 유지할 수 있습니까? 예 : 클래스 < -> 중급 < -> 학생, 갤러리 < -> 중급 < -> 사진 - 중급을 모두 '통과'모델로 사용합니까 ??
  3. 편집 : 방금 테스트 - 할 수 있습니다.) '통과'테이블에 추상 클래스를 사용할 수 있습니까? 만약 위에서 언급 한 복잡한 시나리오가 작동하지 않는다면 순서와 다른 것들을 제공하는 두 개의 추상 클래스를 생성하고 실제로 어떤 관계를 구축하기 위해 정상적인 서브 클래스를 생성 할 수 있습니다 :)

답변

1

중간 모델 사이의 차이점은 사용자가 처리하는 방식 일 뿐이며 "프록시"모델과 함께 사용해야합니다. 내 말은, 옵션을 사용하여 장고 모델 서브 클래 싱을 사용하는 경우 "proxy"라는 이름이 True입니다. 이렇게하면 별도로 처리 할 수 ​​있지만 필요에 따라 옵션이있는 경우 동일한 데이터베이스 테이블에 저장해야합니다.

this을 읽으십시오. 어쩌면 그게 네가 원하는거야. 동일한 구조의 데이터베이스 테이블을 2 개 갖는 대신 2 개 이상의 테이블을 액세스하고 처리 할 수있는 1 개의 테이블을 가질 수 있습니다.

+0

중간 모델에서 주문 필드를 갖고 싶습니다. GalleryField라는 일반 플러그인을 만들고 싶습니다. 일반 중간 모델을 사용하면 중급 메타 클래스를 조작 할 필요가 없습니다 (중간 테이블을 자동 생성). 이를 달성하기위한 몇 가지 기본 단계가 있습니다 (imaging.models의 imaging.fields.GalleryField 및 모델 초록). https://github.com/pielgrzym/django-imaging.git – pielgrzym

관련 문제