내 응용 프로그램에서 현재 장고를 사용하여 특정 클래스 구조를 가지고 있습니다. 모델 레이어를 전혀 사용하지 않았습니다. 데이터베이스 상호 작용 루틴은 직접 작성되었습니다.복잡한 파이썬 개체를 장고 모델에 매핑
그러나 사실상 장고를 최대한 활용하고 실제로 데이터베이스 추상화 계층을 사용할 가능성을 고려합니다. 문제는 내 기존 클래스 구조를 모델 계층과 가장 잘 통합하는 방법입니다.
은 예 클래스 : 여기class UpperClass(base):
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
# attr1 and attr2 are actually instances of, say,
# CustomType1 and CustomType2
소우가 어떻게 장고 모델에이지도를하기 위하여려고하고있다 : 충분히 간단합니다
class UpperClass(models.Model):
attr1 = CustomType1Field(...)
attr2 = CustomType2Field(...)
- 모든 직렬화 및 검증 물건은 이미 작성 따라서 CustomType1 및 CustomType2에 대한 사용자 정의 필드 클래스를 작성하는 것이 전혀 어렵지는 않습니다.
실제 질문은 어디에서 실제 UpperClass의 사용자 정의 (데이터베이스와 관련이없는) 동작을 넣을 수 있는가입니다. 내 이해에서 모델은 "데이터베이스에서 물건을 가져오고 나가는"것에 대한 것이지만, 그 동작은 어디에 있습니까? UpperClass의 Model 인스턴스에 비 데이터베이스 관련 메서드를 포함 시키나요? 정말로, 나는 여기에서 손실에있다. 희망이 적어도 당신에게 부분적인 의미가 있습니다.
갑자기, 이것은 나에게 완벽합니다. 모델 필드 (models.Field의 하위 클래스)는 파이썬 유형/클래스 (to_python()을 통해)로 다시 매핑되므로 UpperClass의 클래스 인스턴스가 초기화되는 방식에 상관없이 - 내 코드에서 __init__에 대한 직접 호출을 통해 a = UpperClass (attr1 = foo, attr2 = bar)) 또는 ORM을 통해 (a = Upperclass.objects.get (...)). 어쨌든 인스턴스 네임 스페이스는 attr1과 attr2가 올바른 유형으로 초기화되어 채워집니다. 내가 너를 정확하게 이해 했니? – shylent
예 : UpperClass의 인스턴스는 일반 속성 attr1 및 attr2 (데이터베이스에서 읽음)를 사용하는 일반 Python 객체입니다. –
도움을 주셔서 대단히 감사드립니다. – shylent