EAV-Django

Software kuvakaappaus:
EAV-Django
Ohjelmiston tiedot:
Versio: 1.4.4
Lähetyksen päivämäärä: 14 Apr 15
Kehittäjä: Andrey Mikhaylenko
Lupa: Vapaa
Suosio: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django on uudelleenkäytettäviä Django app, joka tarjoaa täytäntöönpano Entity-Taito-arvo tietomalli.
& Nbsp; Entity-Taito-arvon mallia (EAV), joka tunnetaan myös esine-ominaisuuden arvon mallia ja avoin skeema, jota käytetään tilanteissa, joissa useita attribuutteja (ominaisuuksia, parametrit), joita voidaan käyttää kuvaamaan asia (" yhteisö "tai" objekti ") on mahdollisesti erittäin laaja, mutta määrä, joka todella sovelletaan tietyn yhteisön on suhteellisen vaatimaton.
EAV-Django toimii hienosti perinteiseen RDBMS (testattu SQLite ja MySQL).
Painopisteet
Sovellus kasvoi verkkokaupasta projekti, joten se on melko käytännöllinen eikä vain teoreettista. Ensisijaiset tavoitteet olivat:
& Nbsp; 1. joustavuutta datan,
& Nbsp; 2. tehokkuuden kyselyt ja
& Nbsp; 3. suurin huollettavuus muokkaamatta koodia.
Tietenkin tämä edellyttää kompromisseja, ja tavoitteena oli löytää vähiten haitallinen yhdistelmä yleisessä tapauksessa.
Ominaisuudet
Kaikki jos mallit ovat abstrakteja, eli EAV-Django ei tallenna mitään tietoja omat taulut. Sen sijaan se tarjoaa perustan oman malleja, jotka on tukea eurooppalaista lisäarvoa kättelyssä.
EAV API sisältää:
& Nbsp; * Luo / päivitys / yhteys: malli tapauksissa säätää Standart API sekä "oikeaa" kentät ja EAV attribuutteja. Abstraktio, ei kuitenkaan seistä teidän tapa ja antaa keinoja käsitellä taustalla kamaa.
& Nbsp; * Kysely: BaseEntityManager sisältää yhdenmukaisen lähestymistavan suodatin () ja sulkea pois () kysellä "oikeaa" ja EAV attribuutteja.
& Nbsp; * Muokattavat skeemojen määritteitä.
& Nbsp; * Admin: kaikki dynaamiset attribuutit voidaan esittää ja muunnella Django admin ilman tai vähän vaivaa (käyttäen eav.admin.BaseEntityAdmin). Skeemat voidaan muokata erikseen, koska tavalliset Django malli esineitä.
& Nbsp; * Hakunäkymät: puoli haku on tärkeä ominaisuus online-kauppoja, luetteloita jne Periaatteessa tarvitset muodossa edustaa tietty osajoukko mallin ominaisuuksia sopivilla widgetit ja valintoja siten, että käyttäjä voi valita toivottavaa arvoja joitakin ominaisuuksia, lähetä lomake ja saat listan osumat. Yleensä kyseessä django-suodatin tekisi, mutta se ei toimi EAV, joten EAV-Django tarjoaa täydellisen valikoiman työkaluja, jotka.
Esimerkkejä
Märitellän EAV sopiva malli, luoda EAV määrite ja miten se käyttäytyy. By "EAV attribuutteja" tarkoitan niitä tallennetaan tietokantaan erillisinä objekteina vaan näytetty ja etsitään siten kuin ne olisivat sarakkeita yksikön taulukko:
alkaen django.db tuonti mallit
alkaen eav.models tuonti BaseEntity, BaseSchema, BaseAttribute
luokan hedelmät (BaseEntity):
& Nbsp; title = models.CharField (MAX_LENGTH = 50)
luokan Schema (BaseSchema):
& Nbsp; syöttö
luokan Attr (BaseAttribute):
& Nbsp; skeema = models.ForeignKey (Schema, related_name = 'attrs')
# Python kuori:
# Define määrite nimeltä "väri"
>>> Color = Schema.objects.create (
... Title = "Väri",
... Name = "color", # omit asuttamaan / slugify osastosta
... Tietotyyppi = Schema.TYPE_TEXT
...)
# Luoda kokonaisuus
>>> E = Fruit.objects.create (title = "Apple", color = "vihreitä")
# Määritellä "oikeaa" ja EAV attribuutteja samalla tavalla
>>> E.title
"Apple"
>>> E.colour
"Vihreitä"
>>> E.save () # käsittelee EAV attribuutteja automaattisesti
# Lista eurooppalaista lisäarvoa ominaisuuksia kuten Attr tapauksissa
>>> E.attrs.all ()
[]
# Haku EAV ominaisuuden, jos se oli tavallinen kenttä
>>> Fruit.objects.filter (color = "keltainen")
[]
# Kaikki yhdiste hakuja tuetaan
>>> Fruit.objects.filter (colour__contains = 'huutaa')
[]
Huomaa, että voimme käyttää, muokata ja kysely väri kuin se olisi totta Entity kenttä, mutta samalla sen nimi, tyyppi ja jopa existance ovat täysin määritellä Schema oikeusasteessa. Schema objekti voidaan ymmärtää luokan, ja liittyvät Attr esineet ovat sen tapauksia. Toisin sanoen, Schema esineitä kuten CharField, IntegerField ja tällainen, ainoastaan ​​määritellään tietojen tasolla, ei kovakoodatuilla Python. Ja ne voivat olla "instantiated" mistään Entity (ellet laittaa custom rajoitteita, jotka ovat ulkopuolella EAV-Django vastuualue).
Nimet ominaisuuksia määritellään liittyvien skeemojen. Tämä voi johtaa pelkoja, että kun nimi on muuttunut, koodi on menossa rikkoa. Oikeastaan ​​tämä ei ole asia nimiä vain suoraan käyttää käsin hakuja. Kaikissa muissa tapauksissa hakuja on rakennettu ilman kovakoodatuilla nimet, ja EAV esineet liittyvät toisiinsa ensisijaisia ​​avaimia, eikä nimiä. Nimet ovat läsnä, jos lomakkeita, mutta muodot generoidaan riippuen nykytilasta metatiedot, joten voit turvallisesti nimetä skeemoja. Mitä voit rikkoa admin käyttöliittymä on tyyppiä. Jos muutat tietotyyppi skeema, kaikki sen attribuutit pysyy samana, mutta käyttää toisen sarakkeen tallentaa niiden arvoja. Kun palautat tietotyyppi, aiemmin tallennetut arvot näkyvät jälleen.
Katso testit lisää esimerkkejä.
Datatyypit
Metadatapohjaisella rakenne ulottuu joustavuutta mutta edellyttää joitakin kompromisseja. Yksi niistä on lisääntynyt liitosten määrä (ja siten hitaampi kyselyt). Toinen on vähemmän tietotyyppejä. Teoriassa voimme tukea kaikkia tietotyyppejä käytettävissä varastointiin, mutta käytännössä se merkitsisi luoda monta saraketta kohti määrite muutamalla käytetään - mitä yritimme välttää käyttämällä eurooppalaista lisäarvoa. Siksi EAV-Django tukee vain joitakin perustyyppiä (vaikka voit laajentaa tätä luetteloa tarvittaessa):
& Nbsp; * Schema.TYPE_TEXT, TextField;
& Nbsp; * Schema.TYPE_FLOAT, FloatField;
& Nbsp; * Schema.TYPE_DATE, DateField;
& Nbsp; * Schema.TYPE_BOOL, NullBooleanField;
& Nbsp; * Schema.TYPE_MANY useita valintoja (eli luettelot arvoja).
Kaikki EAV attribuutit tallennetaan taulukon tietueet ainutlaatuinen yhdistelmiä viittauksia yhteisöjä ja skeemat. (Entity viitataan läpi contenttypes puitteet, skeema viittaa ulkomaisia ​​avain.) Toisin sanoen, siellä voi olla vain yksi määrite tietyn yhteisön ja skeema. Skeema on määritelmä määrite. Skeema määrittelee nimi, otsikko, tietotyyppi ja joukko muita ominaisuuksia, joita sovelletaan kaikkiin määrite tämän skeeman. Kun me pääsy tai etsi EAV attribuutteja, EAV koneet aina käyttää skeemojen attribuutteina metatiedot. Miksi? Koska attribuutin nimi on tallennettu liittyvien skeema ja arvo on tallennettu sarakkeessa määritteitä taulukon. Emme tiedä, mikä sarake on vasta katsomme metatiedot.
Esimerkissä yläpuolelle olemme vain pelataan tekstin määrite. Kaikki muut lajit käyttäytyvät täsmälleen sama paitsi TYPE_MANY. Monta-monta on erikoistapaus, koska se edellyttää ylimääräistä mallin valintoja. EAV-Django tarjoaa abstrakti malli, mutta vaatii sinua määrittelemään konkreettisia malli (esim Choice) ja valitse sen ominaisuuden malli (eli laittaa ulkomaiset avain nimeltä "valinta"). Choice malli on myös osoitat Schema. Tarkista testit esimerkki.

Mitä uutta tässä julkaisussa:

  • Luo / päivitys / yhteys: malli tapauksissa antaa Standart API sekä & quot; todellista & quot; kentät ja EAV määritteitä. Abstraktio, ei kuitenkaan seistä teidän tapa ja antaa keinoja käsitellä taustalla juttuja.
  • Kysely: BaseEntityManager sisältää yhdenmukaisen lähestymistavan suodatin () ja sulkea pois () kysellä & quot; todellista & quot; ja EAV attribuutteja.
  • Muokattavat skeemojen määritteitä.
  • Admin: kaikki dynaamiset attribuutit voidaan esittää ja muunnella Django admin ilman tai vähän vaivaa (käyttäen eav.admin.BaseEntityAdmin). Skeemat voidaan muokata erikseen, koska tavalliset Django mallin objekteja.
  • Hakunäkymät: puoli haku on tärkeä ominaisuus online-kauppoja, luetteloita jne Periaatteessa tarvitset muodossa edustaa tietty osajoukko mallin ominaisuuksia sopivilla widgetit ja valintoja siten, että käyttäjä voi valita toivottavaa arvoja joitakin ominaisuuksia, lähetä lomake ja saat listan osumat. Yleensä kyseessä django-suodatin tekisi, mutta se ei toimi EAV, joten EAV-Django tarjoaa täydellisen valikoiman työkaluja, jotka.

Vaatimukset :

  • Python
  • Django

Muu ohjelmistojen kehittäjä Andrey Mikhaylenko

Timetra
Timetra

14 Apr 15

Monk
Monk

14 May 15

Kommentit EAV-Django

Kommentteja ei löytynyt
Lisää kommentti
Ota kuvia!