EAV-Django

Software captura de pantalla:
EAV-Django
Detalles de software:
Versión: 1.4.4
Fecha de carga: 14 Apr 15
Licencia: Libre
Popularidad: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django es una aplicación de Django reutilizable que ofrece una implementación del modelo de datos entidad-atributo-valor.
& Nbsp; el modelo Entidad-Atributo-Valor (EAV), también conocido como modelo de objeto-atributo-valor y el esquema abierto que se utiliza en los casos en que el número de atributos (propiedades, parámetros) que se pueden utilizar para describir una cosa (un " entidad "u" objeto ") es potencialmente muy amplia, pero el número que realmente se aplican a una determinada entidad es relativamente modesto.
EAV-Django funciona bien con RDBMS tradicional (probado en SQLite y MySQL).
Prioridades
La aplicación creció de un proyecto de tienda online, por lo que es muy práctico y no sólo un ejercicio académico. Las principales prioridades eran:
& Nbsp; 1. la flexibilidad de los datos,
& Nbsp; 2. eficacia de las consultas, y
& Nbsp; 3. máxima capacidad de mantenimiento sin editar el código.
Por supuesto, esto implica ventajas y desventajas, y el objetivo era encontrar la combinación menos perjudicial para el caso general.
Características
Todos los modelos proveen son abstractos, es decir EAV-Django no almacena ninguna información en sus propias mesas. En su lugar, proporciona una base para sus propios modelos que tendrán soporte para EAV fuera de la caja.
El API EAV incluye:
& Nbsp; * Crear / actualizar / Acceso: instancias de modelo proporcionan API standart para ambos campos "reales" y atribuye EAV. La abstracción, sin embargo, no se interponen en su camino y proporciona los medios para hacer frente a las cosas subyacente.
& Nbsp; * Consulta: BaseEntityManager incluye enfoque uniforme en el filtro () y excluir () para consultar "real" y atribuye EAV.
& Nbsp; * esquemas Personalizable para los atributos.
& Nbsp; * Admin: todos los atributos dinámicos se pueden representar y modificar en la administración de Django sin o con poco esfuerzo (utilizando eav.admin.BaseEntityAdmin). Los esquemas se pueden editar por separado, como ordinarios objetos de modelo de Django.
& Nbsp; * Facetas: búsqueda faceta es una característica importante de las tiendas en línea, catálogos, etc. Básicamente, usted tendrá una forma que representa un cierto subconjunto de modelo atribuye con widgets y opciones adecuadas para que el usuario puede elegir los valores deseables de algunas propiedades, presentar la forma y obtener una lista de artículos a juego. En caso general django-filtro haría, pero no va a trabajar con EAV, por lo EAV-Django proporciona un conjunto completo de herramientas para ello.
Ejemplos
Vamos a definir un modelo-EAV amigable, cree un atributo EAV y ver cómo se comporta. Por "atributos EAV" me refiero a los almacenados en la base de datos como objetos separados pero visitada y buscado de tal manera como si fueran columnas de la tabla de la entidad:
a partir de modelos de importación django.db
desde eav.models BaseEntity importación, baseschema, BaseAttribute
Fruit clase (BaseEntity):
& Nbsp; title = models.CharField (max_length = 50)
clase de esquema (baseschema):
& Nbsp; pase
clase Attr (BaseAttribute):
& Nbsp; esquema = models.ForeignKey (Schema, related_name = 'attrs')
# En terminal de Python:
# Definir atributo llamado "color"
>>> Color = Schema.objects.create (
... Title = 'color',
... Name = 'color', # omiten para poblar / slugify del título
... Tipo de datos = Schema.TYPE_TEXT
...)
# Crear una entidad
>>> E = Fruit.objects.create (title = "Apple", color = verde)
# Define "real" y EAV atributos de la misma manera
>>> E.title
'Manzana'
>>> E.colour
'Verde'
>>> E.save () # ocupa de EAV atributos automáticamente
Atributos EAV # lista como instancias Attr
>>> E.attrs.all ()
[]
# Búsqueda por un atributo EAV como si fuera un campo ordinario
>>> Fruit.objects.filter (color = "amarillo")
[]
# Se admiten todas las operaciones de búsqueda de compuestos
>>> Fruit.objects.filter (colour__contains = 'gritar')
[]
Tenga en cuenta que se puede acceder, modificar y color consulta como si fuera un verdadero campo de entidad, pero al mismo tiempo, su nombre, el tipo e incluso existencia estamos completamente definido por una instancia de esquema. Un objeto de esquema puede ser entendida como una clase, y los objetos Attr relacionados son sus instancias. En otras palabras, los objetos de esquema son como CharField, IntegerField y tal, sólo se define en el nivel de datos, no modificable en Python. Y pueden ser "instanciadas" para cualquier entidad (a menos que poner restricciones personalizadas que están fuera del área de EAV-Django de la responsabilidad).
Los nombres de los atributos se definen en esquemas relacionada. Esto puede llevar a los temores de que una vez que se cambia un nombre, el código se va a romper. En realidad este no es el caso como nombres sólo se utilizan directamente para las búsquedas manuales. En todos los demás casos, las búsquedas se construyen sin nombres no modificables y los objetos EAV están vinculados entre sí mediante claves primarias, no por nombres. Los nombres están presentes si formas, pero las formas se generan en función del estado actual de los metadatos, así que usted puede cambiar el nombre al esquema. Lo que se puede romper con la interfaz de administración es el tipo. Si cambia el tipo de datos de un esquema, todos sus atributos seguirán siendo los mismos, pero usarán otra columna para almacenar sus valores. Al restaurar el tipo de datos, los valores previamente almacenados son visibles de nuevo.
Ver pruebas para más ejemplos.
Los tipos de datos
Estructura basada en metadatos extiende flexibilidad pero implica unas concesiones. Uno de ellos se incrementa el número de combinaciones (y, por lo tanto, las consultas más lentas). Otra es menos tipos de datos. En teoría, podemos apoyar todos los tipos de datos disponibles para un almacenamiento, pero en la práctica significaría crear muchas columnas por atributo con sólo algunos están utilizando - exactamente lo que estábamos tratando de evitar mediante el uso de EAV. Esta es la razón por EAV-Django sólo admite algunos tipos básicos (aunque se puede ampliar esta lista si es necesario):
& Nbsp; * Schema.TYPE_TEXT, un TextField;
& Nbsp; * Schema.TYPE_FLOAT, un FloatField;
& Nbsp; * Schema.TYPE_DATE, un DateField;
& Nbsp; * Schema.TYPE_BOOL, un NullBooleanField;
& Nbsp; * Schema.TYPE_MANY para múltiples opciones (es decir, listas de valores).
Todos los atributos de EAV se almacenan como registros en una tabla con combinaciones únicas de referencias a entidades y esquemas. (Entidad está referenciado a través del marco ContentTypes, el esquema se hace referencia a través de clave externa.) En otras palabras, no puede ser sólo un atributo de entidad y esquema determinado. El esquema es una definición de atributo. El esquema define el nombre, título, tipo de datos y un número de otras propiedades que se aplican a cualquier atributo de este esquema. Cuando accedemos O buscar atributos EAV, la maquinaria EAV siempre utiliza esquemas como atributos de metadatos. ¿Por qué? Debido a que el nombre del atributo se almacena en el esquema relacionado, y el valor se almacena en una columna de la tabla de atributos. No sabemos qué columna es hasta que nos fijamos en los metadatos.
En el ejemplo anterior, sólo he jugado con un atributo de texto. Todos los demás tipos se comportan exactamente igual excepto por TYPE_MANY. El-muchos-a-muchos es un caso especial, ya que implica un modelo adicional para opciones. EAV-Django proporciona un modelo abstracto, sino que requiere de definir un modelo concreto (por ejemplo Choice), y apuntan a que a partir del modelo de atributos (clave externa es decir, poner el nombre "elección"). El modelo de elección también tendrá que señalar en el esquema. Revise las pruebas para un ejemplo

¿Cuál es nuevo en esta versión:.

  • Crear / actualizar / Acceso: instancias de modelo proporcionan standart API tanto para & quot; de verdad & quot; campos y atributos EAV. La abstracción, sin embargo, no se interponen en su camino y proporciona los medios para hacer frente a las cosas subyacente.
  • Consulta: BaseEntityManager incluye enfoque uniforme en el filtro () y excluir () para consultar & quot; de verdad & quot; y atributos EAV.
  • esquemas Personalizable para los atributos.
  • Admin: todos los atributos dinámicos se pueden representar y modificar en la administración de Django sin o con poco esfuerzo (utilizando eav.admin.BaseEntityAdmin). Los esquemas se pueden editar por separado, como ordinarios objetos de modelo de Django.
  • Facetas: búsqueda faceta es una característica importante de las tiendas en línea, catálogos, etc. Básicamente, usted tendrá una forma que representa un cierto subconjunto del modelo de atributos con widgets y opciones adecuadas para que el usuario puede elegir los valores deseables de algunas propiedades, presentar la forma y obtener una lista de artículos a juego. En caso general django-filtro haría, pero no va a trabajar con EAV, por lo EAV-Django proporciona un conjunto completo de herramientas para ello.

Requisitos :

  • Python
  • Django

Otro software de desarrollador Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Comentarios a la EAV-Django

Comentarios que no se encuentran
Añadir comentario
A su vez en las imágenes!