EAV-Django

Tela Software:
EAV-Django
Detalhes de Software:
Versão: 1.4.4
Data de upload: 14 Apr 15
Revelador: Andrey Mikhaylenko
Licença: Livre
Popularidade: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django é um app Django reutilizável que fornece uma implementação do modelo de dados do atributo de entidade Value.
& Nbsp; modelo de Entidade-Atributo-Valor (EAV), também conhecido como modelo de objeto-atributo-valor e esquema aberto, que é utilizado nos casos em que o número de atributos (propriedades, parâmetros) que podem ser usados ​​para descrever uma coisa (um " entidade "ou" objeto ") é potencialmente muito vasto, mas o número que vai realmente se aplicam a uma determinada entidade é relativamente modesto.
EAV-Django funciona bem com o tradicional RDBMS (testado em SQLite e MySQL).
Prioridades
O pedido cresceu de um projeto de loja on-line, por isso é muito prático e não apenas um exercício acadêmico. As principais prioridades foram:
& Nbsp; 1. flexibilidade de dados,
& Nbsp; 2. eficiência de consultas e
& Nbsp; 3. manutenção máximo sem editar o código.
É claro que isso implica trade-offs, e que o objetivo era encontrar a combinação menos prejudicial para o caso geral.
Características
Todos os modelos fornecidos são abstrato, ou seja, não EAV-Django não armazena nenhuma informação em seus próprios quadros. Em vez disso, ele fornece uma base para seus próprios modelos que terão apoio para EAV fora da caixa.
A API EAV inclui:
& Nbsp; * Criar / update / acesso: instâncias do modelo fornecer API do standart para ambos os campos "reais" e atributos EAV. A abstração, no entanto, não estão em seu caminho e fornece meios para lidar com o material subjacente.
& Nbsp; * Consulta: BaseEntityManager inclui abordagem uniforme em filter () e excluir () para consultar "real" e atributos EAV.
& Nbsp; * esquemas customizável para atributos.
& Nbsp; * Administrador: todos os atributos dinâmicos pode ser representado e modificado no admin com pouco ou nenhum esforço (usando eav.admin.BaseEntityAdmin). Os esquemas podem ser editados separadamente, como objetos do modelo Django comuns.
& Nbsp; * Facetas: pesquisa faceta é uma característica importante de lojas on-line, catálogos, etc. Basicamente, você vai precisar de uma forma que representa um determinado subconjunto de modelo de atributos com widgets e escolhas adequadas para que o usuário pode escolher os valores desejáveis ​​de algumas propriedades, apresentar a forma e obter uma lista de itens correspondentes. No caso geral Django filtro faria, mas não vai trabalhar com EAV, de modo EAV-Django fornece um conjunto completo de ferramentas para isso.
Exemplos
Vamos definir um modelo ideal para EAV, criar um atributo EAV e ver como ele se comporta. Por "atributos EAV" Quero dizer que está armazenado no banco de dados como objetos separados, mas acessado e pesquisado de tal maneira como se fossem colunas na tabela da entidade:
a partir de modelos de importação django.db
de eav.models BaseEntity importação, baseschema, BaseAttribute
Fruit de classe (BaseEntity):
& Nbsp; title = models.CharField (max_length = 50)
classe Schema (baseschema):
& Nbsp; passe
classe Atr (BaseAttribute):
& Nbsp; schema = models.ForeignKey (Schema, related_name = 'attrs')
# No shell Python:
# Define atributo chamado "cor"
>>> Color = Schema.objects.create (
... Title = 'Cor',
... Name = 'color', # omitir para preencher / slugify do título
... Tipo de dados = Schema.TYPE_TEXT
...)
# Criar uma entidade
>>> E = Fruit.objects.create (title = "Apple", color = "verde")
# Define "real" e EAV atributos da mesma forma
>>> E.title
'Maçã'
>>> E.colour
'Verde'
>>> E.save () # lida com EAV atribui automaticamente
# Lista de atributos EAV como instâncias Atr
>>> E.attrs.all ()
[]
# Procura por um atributo EAV como se fosse um campo comum
>>> Fruit.objects.filter (color = 'amarelo')
[]
# Todas as pesquisas compostos são suportadas
>>> Fruit.objects.filter (colour__contains = 'gritar')
[]
Note que podemos acessar, modificar e cor consulta como se fosse um verdadeiro campo Entidade, mas ao mesmo tempo o seu nome, tipo e até mesmo existência está completamente definida por uma instância do esquema. Um objeto de esquema pode ser entendido como uma classe, e objetos Atr relacionados são suas instâncias. Em outras palavras, objetos de esquema são como CharField, IntegerField e tal, só definida em nível de dados, não codificado em Python. E eles podem ser "instanciado" para qualquer entidade (a menos que você colocar restrições personalizadas que estão fora da área de EAV-Django de responsabilidade).
Os nomes de atributos são definidos em esquemas relacionada. Isso pode levar a temores de que uma vez que um nome é alterado, o código vai quebrar. Na verdade, este não é o caso, como os nomes são apenas diretamente utilizado para pesquisas manuais. Em todos os outros casos, as pesquisas são construídos sem nomes codificados, e os objetos EAV são interligados por chaves primárias, e não por nomes. Os nomes estão presentes se as formas, mas as formas são geradas dependendo do estado atual de metadados, assim você pode renomear com segurança os esquemas. O que você pode quebrar a partir da interface de administração são os tipos. Se você alterar o tipo de um esquema de dados, todos os seus atributos permanecerá o mesmo, mas vai usar outra coluna para armazenar seus valores. Ao restaurar o tipo de dados, os valores previamente armazenados são visíveis novamente.
Veja os testes para mais exemplos.
Os tipos de dados
Estrutura orientada por metadados estende a flexibilidade, mas implica em alguns trade-offs. Um deles é o aumento número de junções (e, portanto, consultas mais lentas). Outra é menos tipos de dados. Teoricamente, podemos suportar todos os tipos de dados disponíveis para um dispositivo de armazenamento, mas, na prática, isso significaria a criação de muitos campos por atributo com apenas alguns sendo usado - exatamente o que estávamos tentando evitar usando EAV. É por isso que EAV-Django suporta apenas alguns tipos básicos (embora você pode estender esta lista se necessário):
& Nbsp; * Schema.TYPE_TEXT, um TextField;
& Nbsp; * Schema.TYPE_FLOAT, um FloatField;
& Nbsp; * Schema.TYPE_DATE, um DateField;
& Nbsp; * Schema.TYPE_BOOL, um NullBooleanField;
& Nbsp; * Schema.TYPE_MANY para múltiplas escolhas (ou seja, listas de valores).
Todos os atributos EAV são armazenados como registros em uma tabela com combinações únicas de referências a entidades e esquemas. (Entidade é referenciado através do quadro contenttypes, o esquema é referenciado via chave estrangeira). Em outras palavras, não pode ser apenas um atributo com determinada entidade e esquema. O esquema é uma definição de atributo. O esquema define nome, título, tipo de dados e uma série de outras propriedades que se aplicam a qualquer atributo desse esquema. Quando acessar ou procure atributos EAV, a máquina EAV sempre usa esquemas como atributos de metadados. Por quê? Porque o nome do atributo é armazenado no esquema relacionado, e o valor é armazenado em uma coluna da tabela de atributos. Nós não sabemos qual coluna é até que olhamos para metadados.
No exemplo acima, desde que jogamos apenas com um atributo de texto. Todos os outros tipos comportam-se exatamente o mesmo, exceto para TYPE_MANY. O many-to-many é um caso especial, pois envolve um modelo extra para escolhas. EAV-Django fornece um modelo abstrato, mas requer que você defina um modelo concreto (por exemplo Choice), e apontar para ele a partir do modelo de atributo (chave estrangeira ou seja, colocar o nome "escolha"). O modelo de escolha também terá que apontar em Schema. Confira os testes para obter um exemplo

O que é novo nesta versão:.

  • Criar / update / acesso: instâncias do modelo fornecem API do standart tanto para & quot; real & quot; campos e atributos EAV. A abstração, no entanto, não estão em seu caminho e fornece meios para lidar com o material subjacente.
  • Consulta: BaseEntityManager inclui abordagem uniforme em filter () e excluir () para consultar & quot; real & quot; e atributos EAV.
  • esquemas customizável para atributos.
  • Administrador: todos os atributos dinâmicos pode ser representado e modificado no admin com pouco ou nenhum esforço (usando eav.admin.BaseEntityAdmin). Os esquemas podem ser editados separadamente, como objetos do modelo Django comuns.
  • Facetas: pesquisa faceta é uma característica importante de lojas on-line, catálogos, etc. Basicamente, você vai precisar de uma forma que representa um determinado subconjunto de modelo de atributos com widgets e escolhas adequadas para que o usuário pode escolher os valores desejáveis ​​de algumas propriedades, apresentar a forma e obter uma lista de itens correspondentes. No caso geral Django filtro faria, mas não vai trabalhar com EAV, de modo EAV-Django fornece um conjunto completo de ferramentas para isso.

Requisitos :

  • Python
  • Django

Outro software de desenvolvedor Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Comentário para EAV-Django

Comentários não encontrado
Adicionar comentário
Ligue imagens!