2009-02-26 5 views
2

장고와 같은 가상 필드가있는 모델을 디자인 할 때 가장 우아한 접근 방법에 대해 질문하고 싶습니다.Django - 가상 필드가있는 모델을 디자인하고 있습니까?

온라인 상점 및 시스템의 모든 제품을 구축한다고 가정 해 봅시다 모델 "Product"으로 정의됩니다.

class Product(models.Model): 
    # common fields that all products share 
    name = ... 
    brand = ... 
    price = ...  

그러나 상점은 서로 완전히 관련이없는 제품 유형을 많이해야합니다, 그래서 다른 제품 유형의 그 가상 필드를 저장할 수있는 방법이 필요합니다 (예. MP3 플레이어의 용량, 책의 PAGECOUNT ,.). 내 생 장고 기술을 가지고 올 수

솔루션은 완벽한 지금까지 멀리 같습니다 "custom_fields"속성 내가 수동으로 관리 중간 테이블을 갖는

  • . 그 또한 유지 보수 및 구현 너무 많은 부두 마법 (파이썬의 위험한 간부-평가 제표와 즉석에서 "제품을"

  • ( 에 내 얼굴을 :) 추악한 비명) 또는 에서 클래스를 상속 에 장고 내부 정보가 필요합니다.)

이 기능은 무엇입니까?

TIA.

답변

13

제품에는 기능이 있습니다.

class Feature(models.Model): 
    feature_name = models.CharField(max_length=128) 
    feature_value = models.TextField() 
    part_of = models.ForeignKey(Product) 

이와 비슷합니다.

기능 목록 일뿐입니다.

p= Product("iPhone", "Apple", 350) 
p.save() 
f= Feature("mp3 capacity", "16Gb", p) 
f.save() 

원하는 경우 별도의 테이블에 기능 이름의 마스터 목록을 만들 수 있습니다. 기능을 과도하게 분석하지 마십시오. 당신은 그들에 대한 어떠한 처리도 할 수 없습니다. 당신이하는 일은 그것들을 선물하는 것뿐입니다.

+1

공통 필드가있는 추상 모델도이를 처리하는 데 유용한 방법입니다. –

3

Ruby on Rails에는 사전을 텍스트 필드로 묶을 수있는 "직렬화 된"필드가 있습니다. 아마도 DJango는 비슷한 것을 제공할까요?

This article에는 SerializedDataField 구현이 있습니다.

0

이동합니다. Create 자신의 추가 필드로 하위 클래스를 생성합니다.

관련 문제