EAV-Django

Sagteware kiekie:
EAV-Django
Sagteware besonderhede:
Weergawe: 1.4.4
Upload datum: 14 Apr 15
Ontwikkelaar: Andrey Mikhaylenko
Lisensie: Gratis
Populariteit: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django is 'n herbruikbare Django app wat bied 'n uitvoering van die Entiteit-Kenmerk-Value data model.
& Nbsp; Entiteit-Kenmerk-Value model (EAV), ook bekend as voorwerp-eienskap-waarde model en oop skema wat gebruik word in omstandighede waar die aantal kenmerke (eienskappe, parameters) wat gebruik kan word om 'n ding te beskryf ('n " entiteit "of" voorwerp ") is potensieel baie groot, maar die getal wat eintlik van toepassing op 'n gegewe entiteit is relatief beskeie.
EAV-Django werk goed met die tradisionele RDBMS (getoets op SQLite en MySQL).
Prioriteite
Die aansoek het gegroei van 'n aanlyn winkel projek, so dit is redelik praktiese en nie net 'n akademiese oefening. Die belangrikste prioriteite was:
& Nbsp; 1. buigsaamheid van data,
& Nbsp; 2. doeltreffendheid van navrae, en
& Nbsp; 3. maksimum instandhouding sonder die wysiging van die kode.
Natuurlik beteken dit trade-offs, en die doel was om die minste skadelike kombinasie vir die algemene geval te vind.
Funksies
Alle voorsien modelle is abstrakte, dws EAV-Django nie enige inligting in sy eie tafels stoor. In plaas daarvan, dit bied 'n basis vir jou eie modelle wat ondersteuning vir EAV sal uit die boks.
Die EAV API sluit in:
& Nbsp; * Skep / update / toegang: model gevalle voorsien standart API vir beide die "regte" velde en EAV eienskappe. Die onttrekking, egter nie in die pad staan ​​en bied middel om te gaan met die onderliggende dinge.
& Nbsp; * Query: BaseEntityManager sluit eenvormige benadering in filter () en sluit () te bevraagteken "regte" en EAV eienskappe.
& Nbsp; * Aanpasbare skemata vir eienskappe.
& Nbsp; * Admin: al dinamiese eienskappe verteenwoordig kan word en verander in die Django admin met min of geen poging om (met behulp van eav.admin.BaseEntityAdmin). Skemata kan afsonderlik geredigeer word, as gewone Django model voorwerpe.
& Nbsp; * Fasette: faset soektog is 'n belangrike kenmerk van die aanlyn winkels, katalogusse, ens Kortom sal jy 'n vorm moet verteenwoordig 'n sekere subset van model eienskappe met toepaslike widgets en keuses, sodat die gebruiker wenslik waardes van sommige eiendomme kan kies, dien die vorm en kry 'n lys van bypassende items. In die algemeen geval Django-filter sal doen nie, maar dit sal nie werk met EAV, so EAV-Django bied 'n volledige stel gereedskap vir daardie.
Voorbeelde
Kom ons definieer 'n EAV-vriendelike model, skep 'n EAV kenmerk en sien hoe dit optree. Deur "EAV eienskappe" Ek bedoel diegene wat gestoor word in die databasis as afsonderlike voorwerpe, maar toeganklik en gesoek in so 'n manier asof hulle kolomme in die entiteit se tabel:
van django.db invoer modelle
van eav.models invoer BaseEntity, BaseSchema, BaseAttribute
klas Fruit (BaseEntity):
& Nbsp; title = models.CharField (MAX_LENGTH = 50)
klas skedule (BaseSchema):
& Nbsp; pass
klas attr (BaseAttribute):
& Nbsp; skema = models.ForeignKey (skedule, related_name = 'attrs')
# In Python dop:
# Definieer kenmerk genaamd "kleur"
>>> Color = Schema.objects.create (
... Title = 'Kleur',
... Name = "kleur, # begaan / slugify vul van die titel
... Data type = Schema.TYPE_TEXT
...)
# Skep 'n entiteit
>>> E = Fruit.objects.create (title = 'Apple', kleur = "groen")
# Definieer "regte" en EAV skryf die dieselfde manier
>>> E.title
'Apple'
>>> E.colour
'Groen'
>>> E.save () # handel oor EAV eienskappe outomaties
# Lys EAV eienskappe as attr gevalle
>>> E.attrs.all ()
[]
# Soektog deur 'n EAV kenmerk asof dit 'n gewone veld
>>> Fruit.objects.filter (kleur = 'geel')
[]
# Alle saamgestelde soektogte word ondersteun
>>> Fruit.objects.filter (colour__contains = 'gil')
[]
Let daarop dat ons kan bekom, te verander en navraag kleur asof dit was 'n ware Entiteit veld, maar op dieselfde tyd om sy naam, tipe en selfs bestaansjaar is heeltemal gedefinieer deur 'n skedule byvoorbeeld. 'N skema voorwerp kan verstaan ​​word as 'n klas, en verwante attr voorwerpe is sy gevalle. Met ander woorde, skedule voorwerpe soos CharField, IntegerField en so, net gedefinieer op data vlak, nie hard-gekodeerde in Python. En hulle kan word "aangehaal" vir enige entiteit (tensy jy persoonlike beperkings wat buite EAV-Django se area van verantwoordelikheid).
Die name van die eienskappe word gedefinieer in verwante skemas. Dit kan lei tot vrese dat wanneer 'n naam verander word, is die kode gaan om te breek. Eintlik is dit nie die geval is as die name word slegs direk gebruik word vir handleiding soektogte. In alle ander gevalle is die soektogte is gebou sonder harde-gekodeerde name, en die EAV voorwerpe met mekaar verbind deur primêre sleutels, nie by die naam. Die name is teenwoordig as vorme, maar die vorms gegenereer afhangende van die huidige stand van metadata, sodat jy veilig kan hernoem die skemata. Wat jy kan breek uit die administrateur koppelvlak is die tipes. As jy die data tipe van 'n skema verander, sal al sy eienskappe dieselfde bly, maar sal nog 'n kolom gebruik om hulle waardes te stoor. Wanneer jy die herstel van die data tipe, voorheen gestoor waardes weer sigbaar.
Sien toetse vir meer voorbeelde.
Datatipes
Metadata-gedrewe struktuur strek buigsaamheid, maar impliseer 'n trade-offs. Een van hulle is groter aantal aansluit (en dus stadiger navrae). Nog minder is datatipes. Teoreties kan ons alle data tipes beskikbaar vir 'n stoor, maar in die praktyk sou dit beteken die skep van baie kolomme per kenmerk met net 'n paar wat gebruik word - presies wat ons probeer om te vermy deur die gebruik van EAV. Dit is die rede waarom EAV-Django ondersteun net 'n paar basiese tipes (al is jy kan hierdie lys uit te brei indien nodig):
& Nbsp; * Schema.TYPE_TEXT, 'n tekstveld;
& Nbsp; * Schema.TYPE_FLOAT, 'n FloatField;
& Nbsp; * Schema.TYPE_DATE, 'n DateField;
& Nbsp; * Schema.TYPE_BOOL, 'n NullBooleanField;
& Nbsp; * Schema.TYPE_MANY vir verskeie keuses (dws lyste van waardes).
Alle EAV eienskappe word gestoor as rekords in 'n tabel met 'n unieke kombinasie van verwysings na entiteite en skemata. (Entiteit verwys deur die contenttypes raamwerk, is skema verwys via vreemde sleutel.) Met ander woorde, kan daar net een kenmerk met gegewe entiteit en skema wees. Die skema is 'n definisie van kenmerk. Die skedule bepaal naam, titel, data tipe en 'n aantal ander eienskappe wat van toepassing is op 'n kenmerk van hierdie skedule. Wanneer ons toegang of soek EAV eienskappe, die EAV masjinerie gebruik altyd skemata as eienskappe metadata. Hoekom? Omdat die kenmerk naam is gestoor in verwante skedule, en die waarde word gestoor in 'n kolom van die eienskappe tafel. Ons weet nie watter kolom is dit tot ons kyk na metadata.
In die voorbeeld wat verskaf hierbo het ons het net gespeel met 'n teks kenmerk. Alle ander tipes tree presies dieselfde, behalwe vir TYPE_MANY. Die veel-tot-baie is 'n spesiale geval as dit behels 'n ekstra model vir keuses. EAV-Django bied 'n abstrakte model, maar vereis dat jy 'n konkrete model (bv Choice), en punt te definieer om dit van die eienskap model (dws sit vreemde sleutel die naam "keuse"). Die keuse model sal ook te wys op skedule. Gaan die toetse vir 'n voorbeeld

Wat is nuut in hierdie release:.

  • Skep / update / toegang: model gevalle voorsien stan API vir beide & quot; real & quot; velde en EAV eienskappe. Die onttrekking, egter nie in die pad staan ​​en bied middel om te gaan met die onderliggende dinge.
  • Query: BaseEntityManager sluit eenvormige benadering in filter () en sluit () te bevraagteken & quot; real & quot; en EAV eienskappe.
  • Aanpasbare skemata vir eienskappe.
  • Admin: al dinamiese eienskappe verteenwoordig kan word en verander in die Django admin met min of geen poging om (met behulp van eav.admin.BaseEntityAdmin). Skemata kan afsonderlik geredigeer word, as gewone Django model voorwerpe.
  • Fasette: faset soektog is 'n belangrike kenmerk van die aanlyn winkels, katalogusse, ens Kortom sal jy 'n vorm wat 'n sekere subset van model eienskappe met toepaslike widgets en keuses, sodat die gebruiker wenslik waardes van sommige eiendomme kan kies moet voorlê die vorm en kry 'n lys van bypassende items. In die algemeen geval Django-filter sal doen nie, maar dit sal nie werk met EAV, so EAV-Django bied 'n volledige stel gereedskap vir daardie.

Vereistes :

  • Python
  • Django

Ander sagteware ontwikkelaar Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Kommentaar te EAV-Django

Kommentaar nie gevind
Kommentaar te lewer
Draai op die foto!