EAV-Django

Скриншот программы:
EAV-Django
Детали программы:
Версия: 1.4.4
Дата загрузки: 14 Apr 15
Разработчик: Andrey Mikhaylenko
Тип распространения: Бесплатная
Популярность: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django является многоразовым Джанго приложение, которое обеспечивает реализацию модели данных сущность-атрибут-значение.
& NBSP; модель сущность-атрибут-значение (EAV), также известный как объект-атрибут-значение модели и открытой схеме, которая используется в тех случаях, когда количество атрибутов (свойств, параметров), которые могут быть использованы для описания вещь (AN " лицо "или" объект ") потенциально очень обширна, но номер, который будет на самом деле относятся к данному объекту относительно невелик.
EAV-Django отлично работает с традиционной СУБД (проверено на SQLite и MySQL).
Приоритеты
Приложение вырос из онлайн магазина проекта, так что это довольно практично и не только академическое упражнение. Основными приоритетами были:
& NBSP; 1. Гибкость данных,
& NBSP; 2. Эффективность запросов, и
& NBSP; 3. Максимальная ремонтопригодность, не редактируя код.
Конечно, это предполагает компромиссы, и цель была найти наименьшее вредное сочетание для общего случая.
Особенности
Все предлагаемые модели являются абстрактными, т.е. EAV-Django не хранить любую информацию в своих таблицах. Вместо этого, она обеспечивает основу для ваших собственных моделей, которые будут иметь поддержку EAV из коробки.
EAV API включает в себя:
& NBSP; * Создание / обновление / доступ: случаи модели обеспечивают стандартную API для обоих «реальными» полями и атрибуты EAV. Абстракция, однако, не стоять на вашем пути и обеспечивает средства для борьбы с основной материал.
& NBSP; * Запрос: BaseEntityManager включает единый подход в фильтр () и исключает () для запроса "реальный" и атрибуты EAV.
& NBSP; * Настраиваемые схемы для признаков.
& NBSP; * Админ: все динамические атрибуты могут быть представлены и не будет изменена администратором Django с отсутствием или небольшим усилием (с помощью eav.admin.BaseEntityAdmin). Схемы могут быть отредактированы отдельно, как обычные модели Django объектов.
& NBSP; * Грани: Поиск аспект является важной особенностью интернет-магазинов, каталогов и т.д. В общем, вы будете нуждаться в форму, представляющий некоторое подмножество модели атрибуты с соответствующими виджетами и выбор, так что пользователь может выбрать желаемые значения некоторых свойств, представить форма и получить список соответствующих элементов. В общем случае Django фильтр будет делать, но это не будет работать с EAV, так EAV-Django предоставляет полный набор инструментов для этого.
Примеры
Давайте определим модель EAV людей, создать атрибут EAV и посмотреть, как он ведет себя. По "атрибуты EAV" Я имею в виду тех, которые хранятся в базе данных в виде отдельных объектов, но доступна и искали таким образом, как если бы они были столбцами в таблице в лица:
от django.db импортных моделей
от eav.models импорта BaseEntity, BaseSchema, BaseAttribute
класс фрукты (BaseEntity):
& NBSP; название = models.CharField (max_length = 50)
класс схемы (BaseSchema):
& NBSP; пас
класс атр (BaseAttribute):
& NBSP; схемы = models.ForeignKey (схемы, related_name = '' ATTRS)
# В оболочке Python:
# Определяют атрибут с именем "Цвет"
>>> Цвет = Schema.objects.create (
... Название = "Цвет",
... Имя = 'цвет', # Пропустить для заполнения / slugify из названия
... Тип данных = Schema.TYPE_TEXT
...)
# Создать объект
>>> Е = Fruit.objects.create (название = 'Apple', цвет = "зеленый")
# Определить "реальный" и EAV атрибуты так же
>>> E.title
'Яблоко'
>>> E.colour
'зеленый'
>>> E.save () # сделок с EAV атрибуты автоматически
# Список атрибутов EAV как экземпляры ATTR
>>> E.attrs.all ()
[<Атр: Apple: Цвет "зеленый">]
# Поиск по атрибута EAV, как будто это был обычный поле
>>> Fruit.objects.filter (цвет = «желтый»)
[<Фрукты: яблоко>]
# Все составные поиски поддерживаются
>>> Fruit.objects.filter (colour__contains = 'кричать')
[<Фрукты: яблоко>]
Обратите внимание, что мы можем получить доступ, изменять и цвет запрос, как будто это было истинное поле Entity, но в то же время его имя, тип и даже Существование полностью определяется Например схемы. Объект схемы можно понимать как класс, а связанные объекты Attr являются его экземпляры. Другими словами, объекты схемы, как CharField, IntegerField и такие, определен только на уровне данных, не трудно закодированы в Python. И они могут быть "экземпляр" для любого лица (если вы положили собственные ограничения, которые находятся за пределами области EAV-Джанго ответственности).
Имена атрибутов определены в соответствующих схем. Это может привести к опасения, что когда-то имя изменено, код будет перерыв. На самом деле это не так, поскольку имена только непосредственно используются для ручных поисков. Во всех других случаях поиски построены без жестко заданных имен, и объекты EAV связаны между собой первичных ключей, не по именам. Имена присутствуют, если формы, но формы генерируются в зависимости от текущего состояния метаданных, так что вы можете спокойно переименовать схем. Что вы можете вырваться из интерфейса администратора является типа. Если вы измените тип данных схемы, все его атрибуты останутся прежними, но будут использовать другую колонку для хранения своих ценностей. При восстановлении тип данных, ранее сохраненные значения могут видеть снова.
См тесты для большего количества примеров.
Типы данных
Метаданными структура расширяет гибкость, но подразумевает некоторые компромиссы. Один из них увеличивается число объединений (и, следовательно, более медленные запросы). Другой меньше типов данных. Теоретически, мы можем поддержать все типы данных, доступные для хранения, но на практике это будет означать, создавая много колонок в атрибуте с помощью нескольких используются - именно то, что мы пытались избежать с помощью EAV. Вот почему EAV-Django только поддерживает некоторые основные типы (хотя вы можете расширить этот список при необходимости):
& NBSP; * Schema.TYPE_TEXT, текстовое поле;
& NBSP; * Schema.TYPE_FLOAT, А FloatField;
& NBSP; * Schema.TYPE_DATE, А DateField;
& NBSP; * Schema.TYPE_BOOL, А NullBooleanField;
& NBSP; * Schema.TYPE_MANY для нескольких вариантов (т.е. списки значений).
Все атрибуты EAV сохранены как записи в таблице с уникальными комбинациями ссылок на лиц и схем. (Entity ссылаются через рамках ContentTypes, схема ссылаются через внешний ключ.) Другими словами, может быть только один атрибут с данного субъекта и схемы. Схема является определение атрибута. Схема определяет название, название, тип данных и ряд других свойств, которые применяются к любому атрибуту этой схемы. Когда мы получаем доступ или поиск атрибутов EAV, то EAV техника всегда использует схем в качестве атрибутов метаданных. Зачем? Потому что имя атрибута хранится в соответствующей схеме и значение сохраняется в колонке таблицы атрибутов. Мы не знаем, какой столбец это, пока мы не посмотрим на метаданных.
В приведенном выше примере мы играли только с текстовым атрибутом. Все остальные типы ведут себя точно так же, за исключением того, для TYPE_MANY. Многие-ко-многим это особый случай, поскольку предполагает дополнительную модель для выборов. EAV-Django предоставляет абстрактную модель, но требует, чтобы определить конкретную модель (например, выбор), и указать на него в модели атрибута (т.е. положить внешнего ключа с именем "Выбор"). Выбор модели также будет иметь, чтобы указать на схеме. Проверьте тесты на пример

Что нового В этом выпуске:.

  • Создать / обновление / доступ: случаи модели обеспечивают Стандарт API для обоих & Quot; реальная и Quot; поля и атрибуты EAV. Абстракция, однако, не стоять на вашем пути и обеспечивает средства для борьбы с основной материал.
  • Запрос: BaseEntityManager включает единый подход в фильтр () и исключает () для запроса и Quot; реальная и Quot; и атрибуты EAV.
  • Настраиваемые схемы для признаков.
  • Админ: все динамические атрибуты могут быть представлены и не будет изменена администратором Django с отсутствием или небольшим усилием (с помощью eav.admin.BaseEntityAdmin). Схемы могут быть отредактированы отдельно, как обычные модели Django объектов.
  • Грани: Поиск аспект является важной особенностью интернет-магазинов, каталогов и т.д. В общем, вы будете нуждаться в форму, представляющую некоторое подмножество модели атрибуты с соответствующими виджетами и выбор, так что пользователь может выбрать желаемые значения некоторых свойств, представить форма и получить список соответствующих элементов. В общем случае Django фильтр будет делать, но это не будет работать с EAV, так EAV-Django предоставляет полный набор инструментов для этого.

Требования

  • Python
  • Джанго

Другие программы разработчика Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Комментарии к EAV-Django

Комментарии не найдены
добавить комментарий
Включите картинки!