2014-01-12 2 views
2

Django 앱의 모델을 설계하는 중이고 문제 해결 방법을 잘 모색 할 수 없습니다.Django의 종속 필드

3 가지 모델이 있습니다. Server, ModuleDevice.

Server은 모듈을 실행할 수있는 서버입니다. Module은 서버에서 실행되며 장치가 포함되어 있습니다.

Devices의 문제점은 이름이 항상 필드이지만 속성이 변경 될 수 있다는 것입니다.

나는 단지 JSON 값을 속성에 넣는 것을 고려했지만 장고 관리자와 함께하는 방법을 알지 못했습니다.

기본적으로 사용자가 기입하는 각종 다양한 필드를 보여 그것이 부착 된 모듈의 장치 따라 이름을 입력한다 예를 들면

:.

module rfm_ninjablock: 
Device fields would be "name" and "code" 

module LimitlessLED 
Device fields would be "name", "controller", "group" and "LightID" 

간단한 있는가 그것을하는 방법 또는 나는 그것에 관하여 틀린 방법 가는가?

답변

1

이렇게하는 방법 중 하나는 네 번째 모델 DeviceAttribute을 만드는 것입니다.

  • 각 장치에는 이름이 있으며 0 이상 DeviceAttribute입니다.

  • DeviceAttribute에는 keyvalue의 두 필드가 있습니다.

또는 제안한 JSON을 사용할 수도 있지만 쉽게 쿼리하거나 업데이트 할 수는 없습니다. 그것은 약간의 반 패턴입니다.

UPDATE : 당신이 Device의 여러 "클래스"가있는 경우가, 다음이 아니라 임의의 속성을하는 것보다, 당신이 당신의 모델을 하위 클래스 유형의 안전을 보장 할 수 있습니다.

이렇게하려면 several ways이 있습니다. 자주 multi-table 접근 방식을 사용했습니다.

그것은 OneToOneFieldDeviceSubclassA 사이 Device, 사이 DeviceSubclassBDevice을 생성한다.

DeviceSubclassA에 특정 필드를 추가 할 수 있으며 다른 필드는 DeviceSubclassB으로 추가 할 수 있습니다. 공통 name 속성은 Device 상위 모델에 있습니다.

+0

답변 해 주셔서 감사합니다. 내가 json에 대해 생각한 이유는 DeviceAttributes가 특정 장치 유형에 대해 특정 작업을 수행하도록하려는 것입니다. – PythonLearner

+0

@PythonLearner, 업데이트 대답을 참조하십시오. –

+0

고마워요! 몇 시간 동안 조사한 후에 장치를 만들 때 django 신호를 사용하여 빈 json 객체를 열에 삽입하여 완전히 동적이 될 수 있도록하기로 결정했습니다. 나는 답변으로 대답을 만들 것입니다, 마치 내가 역동적이되고 싶지 않은 것처럼 이것은 일을 할 것입니다! – PythonLearner