EAV-Django

Screenshot der Software:
EAV-Django
Softwarebeschreibung:
Version: 1.4.4
Upload-Datum: 14 Apr 15
Entwickler: Andrey Mikhaylenko
Lizenz: Frei
Popularität: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django ist eine wiederverwendbare Django-Applikation, die eine Implementierung des Entity-Attribute-Value-Datenmodell zur Verfügung stellt.
& Nbsp; Entity-Attribute-Value-Modell (EAV), auch als Objekt-Attribut-Wert-Modell und Open-Schema, die in Umständen verwendet bekannt, bei dem die Anzahl der Attribute (Eigenschaften, Parameter), die verwendet werden können, um eine Sache zu beschreiben (ein " Unternehmen "oder" Objekt ") ist potentiell sehr große, aber die Zahl, die tatsächlich zu einer bestimmten Einheit gelten, ist relativ bescheiden.
EAV-Django funktioniert mit traditionellen RDBMS (auf SQLite und MySQL getestet).
Schwerpunkte
Die Anwendung wuchs von einem Online-Shop-Projekt, so ist es recht praktisch und nicht nur eine akademische Übung. Die wichtigsten Schwerpunkte waren:
& Nbsp; 1. Flexibilität Daten
& Nbsp; 2. Effizienz von Abfragen und
& Nbsp; 3. maximale Wartungsfreundlichkeit ohne Editieren Sie den Code.
Natürlich bedeutet dies, Trade-offs, und das Ziel war es, die am wenigsten schädliche Kombination für den allgemeinen Fall zu finden.
Eigenschaften
Alle vorgesehenen Modelle sind abstrakte, dh EAV-Django keine Informationen in ihre eigenen Tabellen zu speichern. Stattdessen bietet es eine Grundlage für eigene Modelle, die Unterstützung für EAV aus dem Kasten haben wird.
Die EAV API beinhaltet:
& Nbsp; * erzeugen / aktualisieren / Zugang: Modellinstanzen bieten standart API sowohl für "echte" Felder und EAV-Attribute. Die Abstraktion, aber nicht im Weg stehen, und stellt ein Mittel, mit dem darunterliegenden Material umzugehen.
& Nbsp; * Anfrage: BaseEntityManager enthält einheitliche Vorgehensweise in filter () und schließen () abgefragt werden "echte" und EAV-Attribute.
& Nbsp; * Anpassbare Schemata für Attribute.
& Nbsp; * Admin: alle dynamischen Attribute dargestellt und in der Django-Admin ohne oder mit wenig Aufwand (mit eav.admin.BaseEntityAdmin) geändert werden. Schemata können einzeln, als gewöhnliche Django Modell-Objekte bearbeitet werden.
& Nbsp; * Facetten: Facette Suche ist ein wichtiges Merkmal von Online-Shops, Kataloge, etc. Grundsätzlich erhalten Sie ein Formular benötigen, die eine bestimmte Untergruppe von Modellattribute mit entsprechenden Widgets und Entscheidungen, so dass der Benutzer kann wünschenswert Werte einiger Eigenschaften wählen, senden die Form und eine Liste der passenden Artikel. Im Allgemeinen Fall django-Filter würde zu tun, aber es wird nicht mit EAV arbeiten, so EAV-Django bietet einen vollständigen Satz von Werkzeugen für das.
Beispiele
Wir definieren eine EAV freundliche Modell, erstellen Sie eine EAV Attribut und sehen, wie es sich verhält. Mit "EAV-Attribute" Ich meine, die in der Datenbank als separate Objekte gespeichert, sondern abgerufen und durchsucht so, als ob sie in Spalten des Unternehmens Tisch waren:
von django.db Importmodelle
von eav.models Import BaseEntity, Baseschema, BaseAttribute
Klasse Fruit (BaseEntity):
& Nbsp; title = models.CharField (max_length = 50)
Klasse-Schema (Baseschema):
& Nbsp; Pass
Klasse Attr (BaseAttribute):
& Nbsp; schema = models.ForeignKey (Schema, related_name = 'attrs')
# In Python-Shell:
# Definieren Attribut mit dem Namen "Farbe"
>>> Color = Schema.objects.create (
... Title = "Farbe",
... Name = "Farbe", # weglassen zu / slugify von Titel bevöl
... Datentyp = Schema.TYPE_TEXT
...)
# Zu erstellen ein Unternehmen
>>> E = Fruit.objects.create (title = 'Apple', color = "grün")
# Definieren "echten" und EAV-Attribute auf die gleiche Weise
>>> E.title
'Apfel'
>>> E.colour
"Grünen"
>>> E.save () # beschäftigt sich mit EAV-Attribute automatisch
# Liste EAV Attribute als Attr Instanzen
>>> E.attrs.all ()
[]
# Suche nach einer EAV-Attribut, als wäre es ein normaler Bereich
>>> Fruit.objects.filter (color = "gelb")
[]
# Alle Verbindung Lookups werden unterstützt
>>> Fruit.objects.filter (colour__contains = 'schreien')
[]
Beachten Sie, dass wir Zugang, Änderung und Abfrage Farbe, als ob es eine wahre Entity Feld, aber zur gleichen Zeit seinen Namen, Typ und sogar Existenz vollständig von einem Schema Instanz definiert. Ein Schema-Objekt kann als eine Klasse zu verstehen ist, und den dazugehörigen Attr-Objekte sind die Instanzen. Mit anderen Worten, sind Schemaobjekte wie CharField, Integer und so, nur auf Datenebene definiert, nicht in Python hartcodiert. Und sie können "instanziiert" werden für jede Entity (es sei denn, Sie benutzerdefinierte Einschränkungen, die außerhalb des Verantwortungsbereiches des EAV-Django sind gesetzt).
Die Namen der Attribute werden in ähnlichen Schemata definiert. Dies kann zu Ängsten führen, dass, sobald ein Name geändert wird, wird der Code würde brechen. Eigentlich ist dies nicht der Fall ist, wie Namen sind nur direkt für die manuelle Suchvorgänge verwendet. In allen anderen Fällen werden die Suchvorgänge sind ohne hartcodierte Namen aufgebaut, und die EAV Aufgaben werden mit Primärschlüssel, nicht mit Namen verknüpft. Die Namen vorhanden sind, wenn Formen, aber die Formulare erzeugt abhängig vom aktuellen Zustand von Metadaten, so können Sie sicher den Schemata umzubenennen. Was Sie von der Admin-Oberfläche durchbrechen kann, ist die Art. Wenn Sie den Datentyp eines Schemas ändern, werden alle seine Attribute gleich bleiben, aber wird eine weitere Spalte, um ihre Werte zu speichern. Wenn Sie den Datentyp wieder her, sichtbar sind zuvor gespeicherten Werte wieder.
Siehe Tests für weitere Beispiele.
Datentypen
Metadaten gesteuerte Struktur erstreckt Flexibilität bedeutet aber einige Zugeständnisse. Einer von ihnen wird erhöhte Anzahl von Verknüpfungen (und daher langsamer Abfragen). Ein weiterer Grund ist weniger Datentypen. Theoretisch können wir alle Datentypen für einen Lager verfügbar zu unterstützen, aber in der Praxis würde dies bedeuten, schaffen viele Spalten pro Attribut mit nur wenigen genutzt - genau das, was wir versuchten, mit Hilfe EAV vermeiden. Deshalb EAV-Django unterstützt nur einige grundlegende Typen (obwohl Sie können diese Liste bei Bedarf zu erweitern):
& Nbsp; * Schema.TYPE_TEXT, ein Textfield;
& Nbsp; * Schema.TYPE_FLOAT ein FloatField;
& Nbsp; * Schema.TYPE_DATE eine Datefield;
& Nbsp; * Schema.TYPE_BOOL ein NullBooleanField;
& Nbsp; * Schema.TYPE_MANY für mehrere Auswahlmöglichkeiten (zB Listen von Werten).
Alle EAV Attribute werden als Einträge in einer Tabelle mit einer einzigartigen Kombination von Referenzen auf Entitäten und Schemata gespeichert. (Entity wird durch den Content Rahmen verwiesen wird Schema über Fremdschlüssel referenziert wird.) Mit anderen Worten, kann es nur ein Attribut mit bestimmten Entität und Schema sein. Das Schema ist eine Definition von Attribut. Das Schema definiert Name, Titel, Datentyp und eine Reihe anderer Eigenschaften, die zu jedem Attribut von diesem Schema anzuwenden. Wenn wir zugreifen oder suchen EAV Attribute verwendet der EAV Maschinen immer Schemata als Attribute Metadaten. Warum? Da der Name des Attributs ist in verwandten Schema gespeichert, und der Wert wird in einer Spalte der Attributtabelle gespeichert. Wir wissen nicht, welche Spalte es, bis wir auf Metadaten.
Im obigen Beispiel haben wir vorgesehen nur mit einem Textattribut gespielt. Alle anderen Typen verhalten sich genau gleich, außer für TYPE_MANY. Das Viele-zu-viele ist ein Sonderfall, da sie eine zusätzliche Modell für Entscheidungen einbezieht. EAV-Django bietet ein abstraktes Modell, sondern erfordert, dass Sie ein konkretes Modell (zB Wahl), und zeigen Sie es aus dem Attribut-Modell (dh setzen Fremdschlüssel mit dem Namen "Wahl") zu definieren. Der Wahl-Modell müssen auch bei Schema zeigen. Überprüfen Sie die Tests für ein Beispiel

Was ist neu in dieser Pressemitteilung:.

  • erstellen / aktualisieren / Zugang: Modellinstanzen liefern standart API sowohl für & quot; echte & quot; Felder und EAV Attribute. Die Abstraktion, aber nicht im Weg stehen, und stellt ein Mittel, mit dem darunterliegenden Material umzugehen.
  • Abfrage: BaseEntityManager enthält einheitliche Vorgehensweise in filter () und schließen () abgefragt werden & quot; echte & quot; und EAV-Attribute.
  • Customizable Schemata für Attribute.
  • Admin: alle dynamischen Attribute dargestellt und in der Django-Admin ohne oder mit wenig Aufwand (mit eav.admin.BaseEntityAdmin) geändert werden. Schemata können einzeln, als gewöhnliche Django Modell-Objekte bearbeitet werden.
  • Facetten: Facette Suche ist ein wichtiges Merkmal von Online-Shops, Kataloge, etc. Grundsätzlich erhalten Sie ein Formular, das eine bestimmte Untergruppe von Modellattribute mit entsprechenden Widgets und Entscheidungen, so dass der Benutzer kann wünschenswert Werte einiger Eigenschaften wählen müssen, reichen die Form und eine Liste der passenden Artikel. Im Allgemeinen Fall django-Filter würde zu tun, aber es wird nicht mit EAV arbeiten, so EAV-Django bietet einen vollständigen Satz von Werkzeugen für das.

Anforderungen :

  • Python
  • Django

Andere Software von Entwickler Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Kommentare zu EAV-Django

Kommentare nicht gefunden
Kommentar hinzufügen
Schalten Sie auf die Bilder!