2009-08-20 1 views
0

많은 필드가있는 항목이 포함 된 모델이 있습니다. m2m-relation을 사용하여 각 사용자에게이 필드의 집합을 할당하는 또 다른 모델이 있습니다.Django의 사용자 특정 모델

결국 모든 사용자는 항목 모델의 정의 된 필드 집합에 액세스 할 수 있으며보기에서만이 필드를 볼 수 있으며이 필드 만 편집 할 수 있습니다. 이것을 설정하는 일반적인 방법은?

+0

기본적으로 세 엔티티/모델/테이블이 있습니다. Item-MapItemUser-User? 그리고 MapItemUser를 필터로 사용하여 각 사용자가 Item의 일부만 볼 수 있도록하려면? 필터를 완전히 동적으로 유지 하시겠습니까? 예를 들어 동일한 필드 집합을 항상 볼 수있는 고정 된 유형의 사용자 (역할)가 있습니까? –

답변

0

한 가지 방법은 Item 모델을 개별적으로 사용자에게 할당 할 수있는 부분으로 분해하는 것입니다. 동일한 필드 집합을 항상 볼 수있는 고정 된 사용자 유형 (관리자, 고객, 팀 등)이있는 경우이 부분은 전체 필드 그룹입니다. 매우 동적인데 각 사용자에 대해 개별 필드를 설정할 수 있기를 원하면 각 필드는 자체의 일부입니다.

그런 식으로, 당신은 파트가 참조 할 수있는 ID만으로 구성된 메타 아이템을 가지게됩니다. 이 부분은 함께 유지됩니다. 그런 다음 사용자는 항목이 아니라 파트로 매핑하고 파트의 공통 ID에서 항목보기를 재구성합니다.

+0

답변을 늦게 드려 죄송합니다. 시나리오는 다소 단순합니다. item-Model에는 가능한 많은 필드가 있으며, 각 사용자는 작은 필드 세트에만 액세스 할 수 있습니다. 나는 이것을 일반화하기 위해 (보기 대신) 다이 모델에서 구현해야한다고 생각한다. 어떻게 이런 필터를 만들겠습니까? – schneck

0

두 번째 방법은 모델 계층에 필터링을 포함하지 않는 것입니다. I. 즉, 모델 계층에 매핑을 그대로두고 각 사용자에 대한 항목 필드의 전체 집합을 검색합니다. 그런 다음 규칙을 구현하는 필터를 통해 항목을 전달합니다.

필터링 방법에 따라 어떤 접근 방식이 더 좋을까요? 고정 된 유형의 사용자라면 규칙 기반의 후 처리기를 구현할 것입니다. 매우 동적 인 경우 내 earlier answer에서 접근 방식을 제안 할 것입니다. 모델에 필터링 규칙을 적용하는 또 다른 이유는 필터 엔진을 재사용 할 수없는 응용 프로그램에서 모델을 재사용하려는 경우 (예를 들어 다른 데이터베이스의 응용 프로그램이 동일한 데이터베이스를 공유하는 경우)입니다.