EAV-Django

Screenshot Software:
EAV-Django
Detalii soft:
Versiune: 1.4.4
Incarca data: 14 Apr 15
Producător: Andrey Mikhaylenko
Licenţă: Gratuit
Popularitate: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django este o aplicatie Django reutilizabil, care oferă o punere în aplicare a modelului de date entitate-Atribut-Value.
& Nbsp; modelul entitate-Atribut Valoarea (EAV), de asemenea, cunoscut sub numele de model obiect-atribut-valoare și schema deschis, care este folosit în situațiile în care numărul de atribute (proprietăți, parametrii) care pot fi utilizate pentru a descrie un lucru (un " entitate "sau" obiect ") este potential foarte vast, dar numărul celor care se vor aplica de fapt la o anumită entitate este relativ modest.
EAV-Django funcționează bine cu RDBMS tradiționale (testat pe SQLite și MySQL).
Priorități
Cererea a crescut de la un proiect magazin online, deci este destul de practic și nu doar un exercițiu academic. Principalele priorități au fost:
& Nbsp; 1. flexibilitate a datelor,
& Nbsp; 2. eficiență de interogări, și
& Nbsp; 3. mentenabilitate maxim fără să editezi codul.
Desigur aceasta implică compromisuri, iar scopul a fost de a găsi cel mai puțin dăunător pentru combinația cazul general.
Caracteristici
Toate modelele oferite sunt abstracte, adică EAV-Django nu stoca orice informație în propriile sale tabele. În schimb, acesta oferă o bază pentru propriile modele care vor avea suport pentru EAV din cutie.
EAV API include:
& Nbsp; * Creare / modificare / Acces: cazuri de model prevedea API standard pentru ambele domenii "reale" și EAV atribute. Captarea, cu toate acestea, nu sta în cale și oferă mijloace de a face cu chestii de bază.
& Nbsp; * Solicitare: BaseEntityManager include abordare uniformă la filtru () și exclude () pentru a interoga "reală" și EAV atribute.
& Nbsp; * scheme personalizabile pentru atribute.
& Nbsp; * Admin: toate atributele dinamice poate fi reprezentat și modificat în admin Django cu sau fără pic de efort (folosind eav.admin.BaseEntityAdmin). Scheme pot fi editate separat, așa cum obișnuiți obiecte de model Django.
& Nbsp; * Ipostaze: căutare fațetă este o caracteristică importantă de magazine on-line, cataloage, etc Practic ai avea nevoie de un formular care reprezintă un anumit subset de model de atribute cu widget-uri și opțiuni adecvate, astfel încât utilizatorul poate alege valori dezirabile ale unor proprietăți, prezenta forma și de a lua o listă de elemente care se potrivesc. În caz general django-filtru ar face, dar asta nu va lucra cu EAV, așa EAV-Django ofera un set complet de instrumente pentru asta.
Exemple
Să definim un model EAV prietenos, crea un atribut EAV și a vedea cum se comportă. Prin "EAV atributele" Vreau să spun cele stocate în baza de date ca obiecte separate, dar accesat și căutat în așa fel ca și în cazul în care acestea au fost coloane din tabelul entității:
din modelele django.db de import
de la eav.models BaseEntity import, BaseSchema, BaseAttribute
Fructe de clasă (BaseEntity):
& Nbsp; title = models.CharField (MAX_LENGTH = 50)
clasă Schema (BaseSchema):
& Nbsp; adversari
clasă Attr (BaseAttribute):
& Nbsp; schema = models.ForeignKey (Schema, related_name = "attrs")
# În coajă Python:
# Define atribut numit "culoare"
>>> Color = Schema.objects.create (
... Title = "color",
... Name = "culoare", # omit să populeze / slugify din titlu
... Datatype = Schema.TYPE_TEXT
...)
# Crea o entitate
>>> E = Fruit.objects.create (title = 'Apple, culoare = "verde")
# Defini "reală" și EAV atribuie același mod
>>> E.title
'Măr'
>>> E.colour
"Verde"
>>> E.save () # ocupă cu EAV atributele automat
# Lista atribute EAV ca instanțe Attr
>>> E.attrs.all ()
[]
# Căutare de un atribut EAV ca și în cazul în care acesta a fost un domeniu obișnuit
>>> Fruit.objects.filter (color = "galben")
[]
# Toate căutările combinate sunt acceptate
>>> Fruit.objects.filter (colour__contains = 'striga')
[]
Rețineți că putem accesa, modifica și culoare interogare ca daca era un câmp adevărat Entitate, dar, în același timp numele, tipul și chiar existenta sunt complet definite de o instanță Schema. Un obiect Schema poate fi înțeleasă ca o clasă, iar obiectele ATTR aferente sunt cazuri ei. Cu alte cuvinte, obiecte Schema sunt ca CharField, IntegerField și astfel, definite doar la nivel de date, nu greu codificate în Python. Și ei pot fi "instanțiată" pentru orice entitate (dacă nu pune constrângeri personalizate care sunt în afara zonei EAV-Django de responsabilitate).
Numele de atribute sunt definite în scheme conexe. Acest lucru poate duce la temeri că odată un nume este schimbat, codul se va rupe. De fapt, acest lucru nu este cazul ca nume sunt folosite doar direct pentru căutări manuale. În toate celelalte cazuri, căutările sunt construite fără nume greu codificate, iar obiectele EAV sunt interconectate prin chei primare, nu de nume. Numele sunt prezente dacă formele, dar formele sunt generate în funcție de starea actuală a metadate, astfel încât să puteți redenumi în siguranță schemelor. Ce poate rupe de la interfața de administrare este de tipurile. Dacă schimbați tipul de date de o schemă, toate atributele sale vor rămâne la fel, dar va folosi o altă coloană pentru a stoca valorile lor. Când restaurați tipul de date, valorile stocate anterior sunt din nou vizibile.
Vezi teste pentru mai multe exemple.
Tipuri de date
Structură bazată pe metadate extinde flexibilitate dar presupune unele compromisuri. Una dintre ele este crescut numărul de alătură (și, prin urmare, interogări mai lent). Un alt aspect este mai putine tipuri de date. Teoretic, putem susține toate tipurile de date disponibile pentru o depozitare, dar în practică ar însemna crearea in mai multe coloane pe atribut cu doar câteva utilizat - exact ceea ce am fost încercarea de a evita prin folosirea EAV. Acesta este motivul pentru EAV-Django acceptă numai anumite tipuri de bază (deși puteți extinde această listă, dacă este necesar):
& Nbsp; * Schema.TYPE_TEXT, un TextField;
& Nbsp; * Schema.TYPE_FLOAT, un floatfield;
& Nbsp; * Schema.TYPE_DATE, un DateField;
& Nbsp; * Schema.TYPE_BOOL, un NullBooleanField;
& Nbsp; * Schema.TYPE_MANY pentru mai multe optiuni (de exemplu liste de valori).
Toate atributele EAV sunt stocate ca înregistrări într-un tabel cu combinații unice de trimiteri la entități și scheme. (Entitatea se face referire prin cadrul contenttypes, schemă se face referire prin cheie externă.) Cu alte cuvinte, nu poate exista decât un singur atribut cu dat entitate și schemă. Schema este o definiție de atribut. Schema definește numele, titlul, tipul de date și o serie de alte proprietăți care se aplică la orice atribut din această schemă. Când ne-am accesa sau sa cautati atribute EAV, masinile si utilajele EAV utilizează întotdeauna scheme ca atribute metadate. De ce? Deoarece numele atributului este stocat în schemă conexe, iar valoarea este stocată într-o coloană a tabelului atribute. Noi nu știm ce coloană este până ne uităm la metadate.
În exemplul oferit mai sus le-am jucat doar cu un atribut de text. Toate celelalte tipuri de comporta exact la fel, cu excepția TYPE_MANY. Multe-la-multe este un caz special, deoarece implică un model în plus pentru alegeri. EAV-Django oferă un model abstract, ci necesită definirea unui model concret (de exemplu Choice), și punctul să-l de la modelul atribut (de exemplu, cheia externă a pus numele de "alegere"). Modelul Alegerea va avea, de asemenea la punctul la Schema. Verificați testele de exemplu

Ce este nou în această versiune:.

  • Creare / modificare / Acces: instanțe de model furniza API standard pentru ambele & quot; reală & quot; câmpuri și atribute EAV. Captarea, cu toate acestea, nu sta în cale și oferă mijloace de a face cu chestii de bază.
  • Solicitare: BaseEntityManager include abordare uniformă la filtru () și exclude () pentru a interoga & quot; reală & quot; și EAV atribute.
  • scheme personalizabile pentru atribute.
  • Administrator: toate atributele dinamice poate fi reprezentat și modificat în admin Django cu sau fără pic de efort (folosind eav.admin.BaseEntityAdmin). Scheme pot fi editate separat, așa cum obișnuiți obiecte de model Django.
  • Ipostaze: căutare fațetă este o caracteristică importantă de magazine on-line, cataloage, etc Practic ai avea nevoie de un formular care reprezintă un anumit subset de model de atribute cu widget-uri și opțiuni adecvate, astfel încât utilizatorul poate alege valori dezirabile ale unor proprietăți, prezenta forma și de a lua o listă de elemente care se potrivesc. În caz general django-filtru ar face, dar asta nu va lucra cu EAV, așa EAV-Django ofera un set complet de instrumente pentru asta.

Cerințe :

  • Python
  • Django

Alte software-uri de dezvoltator Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Comentarii la EAV-Django

Comentariile nu a fost găsit
Adauga comentarii
Porniţi pe imagini!