EAV-Django

Software screenshot:
EAV-Django
Podrobnosti Software:
Verze: 1.4.4
Datum uploadu: 14 Apr 15
Licence: Volný
Popularita: 2

Rating: nan/5 (Total Votes: 0)

EPH-Django je na jedno použití aplikace, Django, který poskytuje implementaci datového modelu Entity-atribut-hodnota.
& Nbsp; Model subjektu-atribut-hodnota (EAV), také známý jako objekt-atribut-hodnota modelu a otevřenou schématu, který se používá v případech, kdy je počet, který může být použit k popisu něco atributů (vlastnosti, parametry) (" subjekt "nebo" předmět "), je potenciálně velmi rozsáhlý, ale číslo, které bude skutečně platit k danému subjektu je poměrně skromný.
EAV-Django funguje s tradičním RDBMS (testováno na SQLite a MySQL).
Priority
Aplikace rostl z on-line obchodu projektu, tak to je docela praktické a ne jen akademické cvičení. Mezi hlavní priority byly:
& Nbsp; 1. flexibilita dat,
& Nbsp; 2. Účinnost dotazů, a
& Nbsp; 3. Maximální udržovatelnost bez úpravy kódu.
Samozřejmě, že to znamená, kompromisy, a cílem bylo najít nejméně škodlivá kombinaci pro obecný případ.
Rysy
Všechny uvedené modely jsou abstraktní, tj EAV-Django neukládá žádné informace ve svých vlastních tabulkách. Místo toho, poskytuje základ pro své modely, které budou mít podporu pro EPH po vybalení z krabice.
EAV API zahrnuje:
& Nbsp; * Vytvoření / aktualizace / přístup: instance modelu poskytují standart API pro oba "skutečné" pole a EAV atributy. Abstrakce, ale nestojí v cestě a poskytuje prostředky k řešení zásadních věcí.
& Nbsp; * Dotaz: BaseEntityManager zahrnuje jednotný přístup ve filtru () a vyloučit (), na dotaz "skutečné" a EAV atributy.
& Nbsp; * Přizpůsobitelné schemata pro atributy.
& Nbsp; * Admin: všechny dynamické atributy mohou být reprezentovány a upraven v Django admin s žádným nebo minimálním úsilím (pomocí eav.admin.BaseEntityAdmin). Schémata lze upravovat samostatně, jako běžné modelové objekty Django.
& Nbsp; * stránek: aspekt vyhledávání je důležitým rysem pro on-line obchodů, katalogů, atd V podstatě budete potřebovat formulář reprezentující určitý podmnožina modelu atributů s příslušnými widgety a volby, takže uživatel si může vybrat požadované hodnoty některých vlastností, předloží formulář a získat seznam odpovídajících položek. Obecně případě Django filtr by to, ale to nebude fungovat s EPH, tak EAV-Django nabízí kompletní sadu nástrojů pro to.
Příklady
Definujme model EAV-friendly, vytvořit atribut EAV a uvidíte, jak se chová. By "atributy EAV" myslím ty uložené v databázi jako samostatné objekty, ale přístup a hledal tak, jako by to byly sloupce v tabulce subjektu:
od django.db modelů dovozních
od eav.models dovozu BaseEntity, BaseSchema, BaseAttribute
třída Fruit (BaseEntity):
& Nbsp; title = models.CharField (MAX_LENGTH = 50)
třída Schema (BaseSchema):
& Nbsp; průchod
třída Attr (BaseAttribute):
& Nbsp; schema = models.ForeignKey (Schema, related_name = "attrs")
# Python shell:
# Definovat atribut s názvem "color"
>>> Color = Schema.objects.create (
... Title = "barva",
... Name = "color", # vynechat k naplnění / slugify od titulu
... Datový typ = Schema.TYPE_TEXT
...)
# Vytvořit subjekt
>>> E = Fruit.objects.create (title = "Apple" color = "green")
# Define "skutečné" a EAV atributy stejným způsobem
>>> E.title
"Apple"
>>> E.colour
"Zelené"
>>> E.save () # zabývá EAV automaticky atributy
# Seznam atributy EAV jsou případy, ATTR
>>> E.attrs.all ()
[]
# Vyhledávání atributem EAV, jako kdyby to byla obyčejná pole
>>> Fruit.objects.filter (color = "žluté")
[]
# Všechny složené Vyhledávání v jsou podporovány
>>> Fruit.objects.filter (colour__contains = "křičet")
[]
Všimněte si, že můžeme přistupovat, upravovat a barva dotaz, jako kdyby to byla pravda, Entity pole, ale zároveň její název, typ a dokonce i existencí zcela definovány instance schématu. Objekt Schéma lze chápat jako třída, a související ATTR objekty jsou jeho instance. Jinými slovy, objekty schématu jsou jako Charfield, IntegerField a tak, jen definovaný na úrovni dat, ne pevně v Pythonu. A mohou být "instance" pro každý subjekt (pokud si dát vlastní omezení, která jsou mimo oblast EPH-Django se odpovědnosti).
Jména atributů jsou definovány v souvisejících schémat. To může vést k obavám, že jakmile se změní název, kód se chystá zlomit. Vlastně to není případ, protože jména jsou pouze přímo používají pro ruční hledání. Ve všech ostatních případech jsou Vyhledávání v konstruovány bez pevně jmen a EAV objekty jsou propojeny primární klíče, nikoli jmény. Jména jsou přítomny pokud formy, ale tvary jsou generovány v závislosti na aktuálním stavu metadat, takže můžete bez obav přejmenovat schémata. Co může zlomit z administrátorského rozhraní je druhy. Pokud změníte datový typ schématu, budou všechny jeho atributy zůstávají stejné, ale bude používat jiný sloupec ukládat své hodnoty. Při obnovení datový typ, dříve uložené hodnoty jsou opět viditelné.
Výsledky testů více příkladů.
Datové typy
Metadata řízené konstrukce rozšiřuje flexibilitu, ale má nějaké kompromisy. Jedním z nich je zvýšená Počet spojení (a tedy pomalejší dotazy). Dalším důvodem je méně datové typy. Teoreticky můžeme podporovat všechny datové typy jsou k dispozici pro úložiště, ale v praxi by to znamenalo vytvoření tolik sloupců, kolik za atribut se jen pár používá - přesně to, co jsme se snažili vyhnout pomocí EAV. To je důvod, proč EAV-Django podporuje pouze několik základních typů (i když si můžete rozšířit tento seznam v případě potřeby):
& Nbsp; * Schema.TYPE_TEXT, TextField;
& Nbsp; * Schema.TYPE_FLOAT, FloatField;
& Nbsp; * Schema.TYPE_DATE, DateField;
& Nbsp; * Schema.TYPE_BOOL, NullBooleanField;
& Nbsp; * Schema.TYPE_MANY pro vícenásobné volby (tj seznamy hodnot).
Všechny atributy EAV jsou uloženy jako záznamy v tabulce s jedinečnými kombinacemi odkazů na subjektů a schémat. (Entity je odkazováno prostřednictvím rámce contenttypes, schéma je odkazoval se přes cizí klíč). Jinými slovy, může existovat pouze jeden atribut s daným subjektem a schématu. Schéma je definice atributu. Schéma definuje jméno, název, datový typ a řadu dalších vlastností, které se vztahují na všechny atributy tohoto schématu. Když jsme se přístupu nebo hledat atributy EAV, EAV stroje vždy používá schémata jako atributy metadat. Proč? Vzhledem k tomu, jméno atributu je uložen v související schématu, a hodnota je uložena v sloupci tabulky atributů. Nevíme, který sloupec je, dokud se podíváme na metadata.
V příkladu výše uvedenou jsme jen hráli s textovým atributem. Všechny ostatní typy se chovají úplně stejně, kromě TYPE_MANY. Many-to-many je zvláštní případ, protože se jedná o další model pro volby. EAV-Django poskytuje abstraktní model, ale vyžaduje, abyste definovat konkrétní model, (např Choice) a poukazují na to z modelu atributu (tj dal cizí klíč s názvem "choice"). Model volba bude mít také poukázat na schématu. Podívejte se na testy příklad

Co je nového v této verzi:.

  • Vytvořit / aktualizace / přístup: instance modelu poskytovat standart API pro & quot; real & quot; polí a atributy EAV. Abstrakce, ale nestojí v cestě a poskytuje prostředky k řešení zásadních věcí.
  • Dotaz: BaseEntityManager zahrnuje jednotný přístup ve filtru () a vyloučit () na dotaz & quot; real & quot; a EAV atributy.
  • přizpůsobitelné schemata pro atributy.
  • Admin: všechny dynamické atributy mohou být reprezentovány a upraven v Django admin s žádným nebo minimálním úsilím (pomocí eav.admin.BaseEntityAdmin). Schémata lze upravovat samostatně, jako běžné modelové objekty Django.
  • stránek: aspekt vyhledávání je důležitým rysem pro on-line obchodů, katalogů, atd V podstatě budete potřebovat formulář, který představuje určitou podmnožinu Atributy modelu s příslušnými widgety a volby, takže uživatel si může vybrat požadované hodnoty některých vlastností, předloží formulář a získat seznam odpovídajících položek. Obecně případě Django filtr by to, ale to nebude fungovat s EPH, tak EAV-Django nabízí kompletní sadu nástrojů pro to.

Požadavky na :

  • Python
  • Django

Ostatní software developer Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Komentáře k EAV-Django

Komentáře nebyl nalezen
Přidat komentář
Zapnout obrázky!