1

다른 앱 (제품, 영업, 구매, 회계, MRP 등)이 포함 된 Django의 작은 ERP와 유사한 프로젝트를 진행하고 있습니다. 그들 중 일부는 의존성을 가지고 있습니다 (예를 들어, Sales 앱은 Products 앱이 필요합니다).Django : 다른 앱의 모델 확장

모듈성 및 느슨한 결합을 위해 가능한 한 앱을 독립적으로 유지하려고합니다. 그러나 앱이 종속성 모델에서 테이블을 확장 (새 필드 추가) 할 수있는 경우 매우 유용하며 물건을 더 간단하게 만들 수 있습니다 (예 : Sales에서는 can_be_sold BooleanField를 Products 범위의 테이블 중 하나에 추가하고, 설치되어있는 경우).

사용자가 내부적으로 앱 설치를 선택하면 데이터베이스의 필수 변경 사항이 적용되어 종속성과 올바르게 통합됩니다. 사용자는 불필요하거나 관련이없는 정보를 선행 적으로 제공하지 않고도 필요한 앱만 설치합니다.

나는 의존성과 일대일 관계를 만들려고 생각했지만이 해결책은 나를 설득하지 못한다. (a) 아마도 하나 또는 두 개의 추가 필드에 대해 너무 많은 새 테이블을 만드는 것이 효율적이지 않기 때문이다. (b) 양식과 신호로 작업하는 것이 번거롭기 때문입니다 (많은 앱이 설치되고 전반적으로 모듈성이 감소하면 코드를 작성하기가 더 어려워집니다).

상속 또는 추상 클래스는 부적절한 모델을 만들려고하지 않기 때문에 부적절한 것처럼 보이지만 테이블의 기존 정보 (항목)를 확장하거나 확장합니다.

이것을 달성하는 가장 좋은 방법은 무엇입니까? 사용자 지정 마이그레이션 작업을 작성해야합니까? 그렇지 않으면 더 나은 접근법이 있습니까? 감사!

답변

1

가능한 모든 등록 모듈과 클래스를 저장하려면 데이터베이스 테이블을 만드는 것이 좋습니다. 그래서 변수 python 코드로 eval 문 내에서 사용할 수 있습니다. 그리고 미리 정의 된 메소드 이름이있는 경우이 방법에서는 common_method라고 부릅니다.

당신은 t도 추상 클래스를

my_evaluated_code = 'from '+mymodule_var_name + ' import ' + myclass_var_name +' as custommodule' 
eval(my_evaluated_code) 
custommodule.common_method() 
+0

감사가 필요 돈,하지만 어떻게이 정확히 애플 리케이션 '기존 테이블에 새로운 필드를 추가하는 데 도움이 될 것이다? – mtcg

+0

당신은 데이터베이스에 저장된 생성 된 코드를 기반으로 상속인의 진위를 예측할 수 있습니다. 그래서 당신이 거기에 fileds을 가지고 있지 않으면 당신의 코드는 결코 깨지지 않을 것입니다. –

관련 문제