EAV-Django

Софтуер снимки:
EAV-Django
Софтуер детайли:
Версия: 1.4.4
Дата на качване: 14 Apr 15
Розробник: Andrey Mikhaylenko
Разрешително: Безплатно
Популярност: 51

Rating: nan/5 (Total Votes: 0)

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

Какво ново в тази версия:.

  • Създаване / обновяване / достъп: Модел случаи осигуряват Стандарт API за двете & quot; недвижими & quot; полета и EAV атрибути. Абстракцията, обаче, не стоят на пътя ви и осигурява средства, за да се справят с основната неща.
  • Query: BaseEntityManager включва единен подход в филтър () и изключва (), за да задава въпроси & quot; недвижими & quot; и ЕДС атрибути.
  • адаптивни схеми, за атрибути.
  • Админ: всички динамични качества могат да бъдат представени и модифицирани в админа Django без или с малко усилия (с помощта eav.admin.BaseEntityAdmin). Схеми, може да се редактира отделно, като обикновени Django моделни обекти.
  • Фасети: търсене аспект е важна характеристика на онлайн магазини, каталози и др Основно ще трябва форма, представляваща определена подгрупа от модела атрибути с подходящи приспособления и избори, така че потребителят може да избере желаните стойности на някои свойства, представят формата и да получите списък с подходящи бижута. В общ случай Джанго-филтър ще направя, но тя няма да работи с добавена стойност за ЕС, така ЕДС-Django предоставя пълен набор от инструменти за това.

<силни> Изисквания :

  • Python
  • Django

Друг софтуер на разработчика Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

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

Коментари не е намерена
добавите коментар
Включете на изображения!