EAV-Django

소프트웨어 스크린 샷:
EAV-Django
소프트웨어 정보:
버전: 1.4.4
업로드 날짜: 14 Apr 15
개발자: Andrey Mikhaylenko
라이센스: 무료
인기: 2

Rating: nan/5 (Total Votes: 0)

EAV-장고 엔티티 - 속성 - 값 데이터 모델의 구현을 제공하는 재사용 가능한 장고 응용 프로그램입니다.
& NBSP; 엔티티 - 속성 - 값 모델 (EAV), 또한 상황에 사용되는 객체의 속성 값 모델과 오픈 스키마로 알려진 곳 일을 설명하는 데 사용할 수있는 특성 (속성, 매개 변수)의 수 ( " 엔티티 "또는"개체 ")은 잠재적으로 매우 방대하지만, 실제로 주어진 엔티티에 적용 할 수는 상대적으로 완만하다.
EAV-장고 (SQLite는과 MySQL을 테스트) 전통적인 RDBMS와 잘 작동합니다.
우선 순위
이 응용 프로그램은 온라인 상점 프로젝트에서 성장, 그래서 그것은 단지 학술 운동하지 꽤 실용적이며. 주요 우선 순위는 같다 :
& NBSP; 1. 데이터의 유연성,
& NBSP; 2. 쿼리의 효율성,
& NBSP; 3. 코드를 편집하지 않고 최대 유지 보수.
물론 이것은 절충을 의미하고, 목표는 일반적인 경우에 대한 적어도 유해한 조합을 찾는 것이었다.
특징
가 제공하는 모든 모델은 즉, EAV-장고가 자신의 테이블에 정보를 저장하지 않습니다, 추상적이다. 대신, 상자 밖으로 EAV에 대한 지원을해야합니다 자신의 모델에 대한 기초를 제공한다.
EAV의 API는 다음과 같습니다
& NBSP; * / 업데이트 / 액세스를 만듭니다 모델 인스턴스가 "진짜"필드와 EAV 속성 모두의 standart API를 제공합니다. 추상화는, 그러나, 당신의 방식으로 서서 기본 재료를 다루는 방법을 제공하지 않습니다.
& NBSP; * 쿼리 : BaseEntityManager 균일 필터 방식 ()와 제외 () 쿼리에 "진짜"와 EAV 속성이 포함되어 있습니다.
& NBSP; * 속성에 대한 사용자 정의 도식.
& NBSP; * 관리 : 모든 동적 속성이 표현과 없거나 약간의 노력 (eav.admin.BaseEntityAdmin 사용)와 장고 관리자에 수정할 수 없습니다. 도식은 일반 장고 모델 개체로, 별도로 편집 할 수 있습니다.
& NBSP; * 패​​싯 :면 검색이 기본적으로 당신은 사용자가 어떤 속성의 바람직한 값을 선택할 수 있도록 모델의 특정 부분 집합 해당 위젯과 선택 속성과 표현 양식이 필요합니다 등 온라인 상점, 카탈로그,의 중요한 기능입니다 제출 형태와 일치하는 항목의 목록을 얻을. 일반적인 경우는 장고 필터에서 할 것이지만, EAV-장고를위한 완벽한 도구 세트를 제공합니다 그래서, EAV 작동하지 않습니다.
예를 들면
이제, EAV 친화적 인 모델을 정의 EAV 속성을 생성하고이 동작하는 방법을 살펴 보자. "EAV 속성"으로 I는 별도 개체로서 데이터베이스에 저장하고 있지만, 그들이 액세스 엔티티의 테이블의 열 것처럼 같은 방식으로 그 검색을 의미 :
django.db 수입 모델에서
eav.models 수입 BaseEntity, BaseSchema, BaseAttribute에서
클래스 과일 (BaseEntity) :
& NBSP; 제목 = models.CharField (MAX_LENGTH = 50)
클래스 스키마 (BaseSchema) :
& NBSP; 패스
클래스의 Attr (BaseAttribute) :
& NBSP; 스키마 = models.ForeignKey (스키마, related_name = '바인드합니다')
파이썬 쉘에서 # :
# 속성은 "컬러"라는 정의합니다
>>> 색상 = Schema.objects.create (
... 제목 = '컬러'
... 이름 = '색상', #의 생략은 제목에서 / slugify 웁니다
... 데이터 유형 = Schema.TYPE_TEXT
...)
# 엔티티를 생성
>>> E = Fruit.objects.create (제목 = '애플', 색상 = '녹색')
# "실제"EAV 정의하고는 동일한 방법으로 특성
>>> e.title
'애플'
>>> e.colour
'녹색'
>>> EAV와 e.save () # 상품의 자동 속성
Attr의 인스턴스로 # 목록 EAV 속성
>>> e.attrs.all ()
[]
EAV 속성으로 # 됨이 일반 필드 인 것처럼
>>> Fruit.objects.filter (색상 = '노란색')
[<과일 : 애플>]
# 모든 화합물 조회가 지원됩니다
>>> Fruit.objects.filter (colour__contains = '소리')
[<과일 : 애플>]
우리는, 액세스가 진정한 필드 엔티티 인 것처럼 수정 및 쿼리 색상이지만 동시에 해당 이름을 입력하고 심지어 완전히 실존 스키마 인스턴스에 의해 정의 할 수 있습니다. 스키마 객체는 클래스로 이해 될 수 있으며, 관련되는 Attr 객체는 인스턴스 할 수 있습니다. 즉, 스키마 객체는 CharField, IntegerField 만 데이터 레벨에서 정의 등이, 파이썬에서 하드 코드되지 같다. 그리고 그들은 (당신이 책임 EAV - 장고의 영역 외부에있는 사용자 정의 제한 조건을 넣어하지 않는 한) 모든 실체에 대해 "인스턴스"할 수 있습니다.
속성의 이름은 관련 도식에 정의되어 있습니다. 이 이름이 변경되면, 코드가 깰려고하고 있다는 우려로 이어질 수 있습니다. 직접 이름 만 설명서 조회에 사용 된 바와 사실은 그렇지 않다. 모든 다른 경우, 조회는 하드 코딩 된 이름이없이 구성되며, EAV 개체는 기본 키에 의해, 서로 연결되지 명칭으로된다. 이름은 경우 양식 존재하지만 안전하게 도식의 이름을 바꿀 수 있도록 양식, 메타 데이터의 현재 상태에 따라 생성됩니다. 당신이 관리 인터페이스에서 깰 수있는 것은 유형이다. 당신이 스키마의 데이터 유형을 변경하는 경우, 모든 속성은 그대로 유지됩니다하지만 그 값을 저장하기 위해 다른 열을 사용합니다. 이 데이터 형식을 복원 할 때, 이전에 저장된 값을 다시 볼 수 있습니다.
더 많은 예제에 대한 테스트를 참조하십시오.
데이터 유형
메타 데이터 기반 구조의 유연성을 확장하지만 트레이드 오프 (trade-off)를 의미한다. 그 중 하나는 (따라서, 느린 쿼리 등) 조인의 수를 증가한다. 또 다른 적은 데이터 유형입니다. 이론적으로, 우리는 저장 장치에 사용할 수있는 모든 데이터 유형을 지원 할 수 있지만, 실제로는 몇 가지가 사용되고와 속성에 따라 많은 열을 생성하는 것을 의미한다 - 우리가 EAV를 사용하여 피하려고 노력했다 정확하게. EAV-장고 만 (필요한 경우이 목록을 확장 할 수있다) 몇 가지 기본 유형을 지원하는 이유입니다 :
& NBSP; * Schema.TYPE_TEXT, 텍스트 필드;
& NBSP; * Schema.TYPE_FLOAT, FloatField;
& NBSP; * Schema.TYPE_DATE,하여 DateField;
& NBSP; * Schema.TYPE_BOOL, NullBooleanField;
& NBSP; * 다중 선택 (값 즉, 목록)에 대한 Schema.TYPE_MANY.
모든 EAV 속성은 엔티티와 도식에 대한 참조의 독특한 조합으로 테이블에 레코드로 저장됩니다. (기업이 contenttypes 프레임 워크를 통해 참조, 스키마가 외부 키를 통해 참조됩니다.) 즉, 주어진 엔티티 및 스키마 만 하나의 속성이있을 수있다. 스키마는 속성의 정의입니다. 스키마는 이름, 제목, 데이터 유형이 스키마의 모든 속성에 적용되는 다른 속성의 수를 정의합니다. 우리는 EAV 속성에 액세스하거나 검색 할 때, EAV 기계는 항상 속성 메타 데이터와 같은 도식을 사용합니다. 왜? 속성의 이름이 관련 스키마에 저장되기 때문에 속성 값 테이블의 열에 저장된다. 우리는 우리가 메타 데이터를 볼 때까지 인 열 모른다.
우리의 위에 제공된 예에서 만 텍스트 속성으로 연주했습니다. 모든 다른 종류의 정확히 TYPE_MANY을 제외하고 같은 동작합니다. 그 선택을위한 별도의 모델을 포함하기는 다 대다 특별한 경우이다. EAV-장고 추상적 인 모델을 제공하지만, 속성 모델 ( "선택"이라는 즉 넣어 외래 키)에서에 콘크리트 모델 (예 : 선택), 및 점을 정의해야합니다. 선택 모델은 스키마를 가리 키도록해야합니다. 예를 들어 테스트를 확인

이 릴리스의 새로운 기능 :

이 / 업데이트 / 액세스를 만듭니다 모델 인스턴스가 모두 & quot 대한 STANDART API를 제공한다; 진짜 & quot;. 필드와 EAV 특성을가집니다. 추상화는, 그러나, 당신의 방식으로 서서 기본 재료를 다루는 방법을 제공하지 않습니다.
질의 : BaseEntityManager 균일 필터 방식 ()와 쿼리 & 위해) (제외를 포함 quot; 진짜 & quot; 및 EAV 속성.
속성에 대한 사용자 정의 도식.
관리 : 모든 동적 속성이 표현과 없거나 약간의 노력 (eav.admin.BaseEntityAdmin 사용)와 장고 관리자에 수정할 수 없습니다. 도식은 일반 장고 모델 개체로, 별도로 편집 할 수 있습니다.
패싯 :면 검색 등 온라인 상점, 카탈로그,의 중요한 기능은 기본적으로 당신은 사용자가 어떤 속성의 바람직한 값을 선택할 수 있도록, 모델의 특정 부분 집합 해당 위젯과 선택 속성과 표현 양식을 필요로하는 양식을 제출 것입니다 일치하는 항목의 목록을 얻을. 일반적인 경우는 장고 필터에서 할 것이지만, EAV-장고를위한 완벽한 도구 세트를 제공합니다 그래서, EAV 작동하지 않습니다.

이 요구 사항 :

이 파이썬
장고

개발자의 기타 소프트웨어 Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

코멘트 EAV-Django

댓글을 찾을 수 없습니다
코멘트를 추가
이미지를 켜십시오!