EAV-Django

Screenshot Software:
EAV-Django
Szczegóły programowe:
Wersja: 1.4.4
Filmu: 14 Apr 15
Wywoływacz: Andrey Mikhaylenko
Licencja: Wolny
Popularność: 51

Rating: nan/5 (Total Votes: 0)

EAV-Django Django app wielokrotnego użytku, które zapewnia realizację modelu danych Entity-atrybut-wartość.
& Nbsp; Model Podmiot-atrybut-wartość (wartość dodana), znany również jako obiekt-atrybut-wartość modelu i otwartego schematu, który jest używany w sytuacji, gdy liczba, które mogą być używane do opisu rzeczy atrybutów (właściwości, parametrów) (" podmiot "lub" obiekt ") jest potencjalnie bardzo rozległe, ale numer, który będzie faktycznie dotyczą danego podmiotu jest stosunkowo niewielka.
EAV-Django współpracuje z tradycyjnych RDBMS (testowane na SQLite i MySQL).
Priorytety
Aplikacja wzrosła z projektu sklepu internetowego, więc jest to dość praktyczne, a nie tylko akademickie ćwiczenie. Głównymi priorytetami były:
& Nbsp; 1. Elastyczność danymi
& Nbsp; 2. wydajność zapytań, a
& Nbsp; 3. Maksymalna konserwacji bez edycji kodu.
Oczywiście oznacza to kompromisów, a celem było znalezienie najmniej szkodliwego połączenie dla przypadku ogólnego.
Cechy
Wszystkie modele są dostarczane abstrakcyjne, czyli EAV-Django nie przechowuje żadnych informacji w swoich tabelach. Zamiast tego, stanowi podstawę do własnych modeli, które będą miały wsparcie dla EAV z pudełka.
EAV API zawiera:
& Nbsp; * Tworzenie / aktualizacja / dostęp: modelowe przypadki zapewnić standart API zarówno dla "prawdziwych" pól i atrybutów EAV. Abstrakcja, jednak nie staną na twojej drodze i zapewnia środki do walki z podstawowej rzeczy.
& Nbsp; * Zapytanie: BaseEntityManager zawiera jednolite podejście w filtrze () i wyłączyć () do zapytania "prawdziwe" i atrybutów EAV.
& Nbsp; * Konfigurowalny schematy atrybutów.
& Nbsp; * Admin: wszystkie dynamiczne atrybuty mogą być reprezentowane i modyfikowane w panelu administracyjnym Django bez lub z niewielkim wysiłku (przy użyciu eav.admin.BaseEntityAdmin). Schematy można edytować osobno, jak zwykłe Django modelu obiektów.
& Nbsp; * Oblicza: wyszukiwanie facet jest ważną cechą sklepów internetowych, katalogów, itp Zasadniczo trzeba będzie postać reprezentująca pewien podzbiór modelu przypisuje odpowiednie wzory i wybory, tak że użytkownik może wybrać pożądane wartości niektórych właściwości, przedkłada Forma i otrzymać listę pasujących elementów. W ogólnym przypadku Django filtr zrobi, ale to nie będzie działać z EAV, więc EAV-Django zapewnia kompletny zestaw narzędzi do tego.
Przykłady
Zdefiniujmy model EAV z dziećmi, utworzyć atrybut EAV i zobaczyć, jak się zachowuje. Przez "atrybuty EAV" mam na myśli te, przechowywane w bazie danych jako oddzielne obiekty ale przeglądane i przeszukiwane w taki sposób, jak gdyby były kolumny w tabeli jednostki:
z django.db modeli importowych
z eav.models BaseEntity importu, BaseSchema, BaseAttribute
Klasa Fruit (BaseEntity):
& Nbsp; title = models.CharField (max_length = 50)
Klasa Schema (BaseSchema):
& Nbsp; karnet
Klasa Attr (BaseAttribute):
& Nbsp; Schemat = models.ForeignKey (Schema, related_name = "attrs ')
# W Pythonie powłoki:
# Define atrybut o nazwie "kolor"
>>> Color = Schema.objects.create (
... Title = "kolor",
... Name = "color", aby wypełnić # pominąć / slugify z tytułem
... Typ danych = Schema.TYPE_TEXT
...)
# Utworzenia podmiotu
>>> E = Fruit.objects.create (title = "Jabłko" color = "green")
# Określenie "prawdziwy" i EAV atrybuty w ten sam sposób
>>> E.title
"Jabłko"
>>> E.colour
"Zielone"
>>> E.save () # dotyczy EAV atrybuty automatycznie
Lista # atrybuty EAV jak przypadkach attR
>>> E.attrs.all ()
[]
# Szukaj przez atrybut EAV, jakby to było zwykłe pola
>>> Fruit.objects.filter (color = "żółty")
[]
# Wszystkie obsługiwane są złożone wyszukiwań
>>> Fruit.objects.filter (colour__contains = 'krzyczeć')
[]
Należy pamiętać, że mamy dostęp, modyfikowanie i kolor zapytanie tak, jakby był prawdziwym polu Podmiot, ale w tym samym czasie jego nazwa, typ, a nawet istnienia są całkowicie określone przez przykład schematu. Obiekt schematu mogą być rozumiane jako klasa, a powiązane obiekty Attr są jego wystąpienia. Innymi słowy, Obiekty schematu są jak Charfield, IntegerField i takie, tylko zdefiniowane na poziomie danych, nie zakodowane w Pythonie. I może być "instancja" dla każdej jednostki (chyba, że ​​wprowadzone ograniczenia własnych, które są poza obszar EAV-Django odpowiedzialności).
Nazwy atrybutów są zdefiniowane w powiązanych schematów. To może prowadzić do obaw, że po nazwa zostanie zmieniona, kod będzie łamał. Właściwie to nie jest przypadek, nazwy są tylko bezpośrednio wykorzystywane do ręcznego sprawdzenia. We wszystkich innych przypadkach wyszukiwań są zbudowane bez nazwy zakodowane, a obiekty są ze sobą powiązane poprzez EAV kluczy głównych, a nie nazwy. Nazwy są obecne jeśli formy, ale formy są generowane w zależności od aktualnego stanu metadanych, dzięki czemu można bezpiecznie zmienić nazwę schematów. Co można oderwać się od interfejsu administratora jest typów. W przypadku zmiany typu danych schematu, wszystkie jego atrybuty pozostaną takie same, ale użyje innej kolumny do przechowywania wartości. Podczas przywracania danych typu, wcześniej zapisane wartości są widoczne ponownie.
Zobacz testy na kilku przykładach.
Typy danych
Struktury metadanych opartych rozciąga się elastyczność, ale implikuje pewne kompromisy. Jednym z nich jest zwiększenie liczby JOIN (a zatem wolniej zapytań). Innym jest mniej typy danych. Teoretycznie możemy obsługiwać wszystkie typy danych dostępne dla przechowywania, ale w praktyce oznaczałoby to stworzenie wielu kolumn na atrybut tylko kilku używane - dokładnie to, co staraliśmy się uniknąć stosując europejską wartość dodaną. Dlatego EAV-Django obsługuje tylko kilka podstawowych typów (choć można rozszerzyć tę listę w razie potrzeby):
& Nbsp; * Schema.TYPE_TEXT, TextField;
& Nbsp; * Schema.TYPE_FLOAT, FloatField;
& Nbsp; * Schema.TYPE_DATE, DateField;
& Nbsp; * Schema.TYPE_BOOL, NullBooleanField;
& Nbsp; * Schema.TYPE_MANY dla wielu wyborów (czyli listy wartości).
Wszystkie atrybuty EAV są przechowywane w postaci zapisów w tabeli z unikalnych kombinacji odniesienia do podmiotów i schematów. (Podmiot odwołuje się poprzez ramach contenttypes, schematu jest określany przez klucz obcy). Innymi słowy, nie może być tylko jeden atrybut z danego podmiotu i schematu. Schemat jest definicja atrybutu. Schemat definiuje nazwę, tytuł, typ danych i wiele innych właściwości, które mają zastosowanie do wszystkich atrybutów tego schematu. Gdy mamy dostęp lub wyszukaj atrybuty EAV, maszyny EAV zawsze używa schematów jako metadane atrybutów. Dlaczego? Ponieważ nazwa atrybutu jest przechowywany w związanych schematu i wartości są przechowywane w kolumnie tabeli atrybutów. Nie wiemy, która kolumna jest dopóki patrzymy na metadanych.
W przykładzie opisanym powyżej, graliśmy tylko z atrybutem tekstowym. Wszystkie inne typy zachowują się dokładnie tak samo, z wyjątkiem TYPE_MANY. Wiele-do-wielu jest przypadkiem szczególnym, ponieważ obejmuje dodatkowe model wyborów. EAV-Django zapewnia abstrakcyjne modelu, ale wymaga zdefiniowania konkretnego modelu (np wybór), i wskaż go z modelu atrybutów (tj umieścić klucz obcy o nazwie "wybór"). Wybór modelu będzie musiał wskazać na schemacie. Sprawdź testy na przykład

Co nowego w tym wydaniu:.

  • Tworzenie / aktualizacja / dostęp: modelowe przypadki zapewnić standard API zarówno dla & quot; prawdziwe & quot; pól i atrybutów EAV. Abstrakcja, jednak nie staną na twojej drodze i zapewnia środki do walki z podstawowej rzeczy.
  • Zapytanie: BaseEntityManager zawiera jednolite podejście w filtrze () i nie () do zapytania & quot; prawdziwe & quot; i EAV atrybutów.
  • Możliwość dostosowania schematy atrybutów.
  • Admin: wszystkie dynamiczne atrybuty mogą być reprezentowane i modyfikowane w panelu administracyjnym Django bez lub z niewielkim wysiłku (przy użyciu eav.admin.BaseEntityAdmin). Schematy można edytować osobno, jak zwykłe Django modelu obiektów.
  • Oblicza: wyszukiwanie facet jest ważną cechą sklepów internetowych, katalogów, itp Zasadniczo trzeba będzie formularz reprezentujący pewien podzbiór modelu przypisuje odpowiednie wzory i wybory, tak że użytkownik może wybrać pożądane wartości niektórych właściwości, przedkłada Forma i otrzymać listę pasujących elementów. W ogólnym przypadku Django filtr zrobi, ale to nie będzie działać z EAV, więc EAV-Django zapewnia kompletny zestaw narzędzi do tego.

Wymagania :

  • Python
  • Django

Inne programy z deweloperem Andrey Mikhaylenko

Timetra
Timetra

14 Apr 15

Monk
Monk

14 May 15

Komentarze do EAV-Django

Komentarze nie znaleziono
Dodaj komentarz
Włącz zdjęć!