2012-07-30 2 views
0
여기

은 내가 뭘하려고 오전의 응축 예입니다Django의 하위 모델에 '통과'모델을 추가 할 수 있습니까?

class Entity(models.Model): 
    name = models.CharField(max_length=70) 

class Individual(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

class BookingAgent(Entity) 
    staff = models.ManyToManyField(Individual, through='Role', related_name="employee") 

class Role(models.Model): 
    person = models.ForeignKey(Individual) 
    company = models.ForeignKey(Entity) 
    position = models.CharField(max_length=70) 

을 기본적으로, 나는 다음을 등 주소 즉, 회사에 대한 모든 기본 정보를 저장 Entity라는 부모 클래스를 가지고 Entity의 하위 인 BookingAgent입니다. BookingAgent 모델에서 통과 관계를 만들려고해도 작동하지 않습니다.

'staff' is a manually-defined m2m relation through model Role, which does not have foreign keys to Individual and BookingAgent

그러나 통과 관계가 Entity 모델에 정의되어있을 때 작동합니다.

제 목표는 각 엔티티에 직원 또는 구성원 인 개인의 목록을 갖게하는 것입니다. 왜 작동하지 않는지 이해하지만 우아한 해결책을 찾을 수는 없습니다.

감사합니다.

업데이트 : BookingAgents, ManagementCompanies 수없는 일부 엔티티가있을 수 있기 때문에 엔티티는 추상 기본 클래스 아니다 명확히하기 등

+0

* 기술적으로 *, 당신이 무엇을 아무 문제가 없습니다. 'BookingAgent'가'Entity'이면'Entity'를 받아들이는'ForeignKey'에 저장할 수 있어야합니다. 그러나 장고가 M2M API를 설정하는 방식으로는 작동하지 않습니다. API가 제대로 작동하려면 관련 관리자 인 'Individual'및 'BookingAgent'와 관련된 관리자를 연결해야하지만 관련 관리자가 오히려 'Individual'및 'Entity'에 추가됩니다. 이 버그를 호출 할 수도 있지만 장고 개발자가 제출 한 것이라면 Django 개발자가 WONTFIX로 표시한다고 생각합니다. –

+0

고마워요 @ChrisPratt! 나는 매니저를 찾아 보았지만 내가 이것을 해결할 수있는 방법에 관해서는 여전히 혼란 스럽다. 명확히 해 주시겠습니까? –

+0

요점은 당신이 * 이것을 해결할 수 있다고 생각하지 않는다는 것입니다. 각 특정 관계에 대해 서로 다른 "통과"모델을 사용해야합니다. –

답변

0

난 당신이 "RoleTest"에서 "역할"당신을 변경할 필요가 있다고 생각 (추상 기본 클래스 및 Entity는 안?) BookingAgent하지 Entity에 외부 키를 가질 필요가

class BookingAgent(Entity) 
    staff = models.ManyToManyField(Individual, through='Role', related_name="employee") 

class Role(models.Model): 
    person = models.ForeignKey(Individual) 
    company = models.ForeignKey(BookingAgent) 
+0

고마워요! "RoleTest"오타가 내 질문에 여기에만 있었다. 나는 또한 'ManagementCompany'등을 가지고 있기 때문에 foregin 키를 'BookingAgent'로 가질 수 없습니다. 그렇지 않으면 각각의 'Role'모델을 별도로 만들어야합니까? –

+0

. 이것은 그리 간단하지 않습니다. 'Entity'의 각 하위 클래스에 대해 별도의 테이블을 만들 수 있습니다. 또는 'Entity'의 모든 하위 클래스를 병합하고 '예약 에이전트', '관리 회사'중 하나가 될'type' 필드를 제공 할 수 있습니다. 또는 Django의 컨텐츠 유형을 사용하여 역할에서 역할로 일반적인 관계를 가질 수 있습니다 어떤 모델이든. 아마도 이들 중 어느 것도 이상적이지 않습니다. – scytale

+0

의견에 감사드립니다. 내 하위 클래스 중 일부는 다른 필드가 있으므로 '엔터티'로 병합하지 않고 일반 관계 경로를 선택합니다. 이 튜토리얼의 도움 : [link] (http://blog.yawd.eu/2011/admin-site-widget-generic-relations-django/) –

관련 문제