EAV-Django

Software screenshot:
EAV-Django
Software ətraflı:
Version: 1.4.4
Tarixi Upload: 14 Apr 15
Geliştirici: Andrey Mikhaylenko
Lisenziya: Pulsuz
Məşhurluq: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django Entity-Atribut-Value data model bir həyata keçirilməsini təmin edən bir reusable Django app edir.
& Nbsp; Entity-Atribut-dəyər modeli (EAV), həmçinin hallarda istifadə olunur obyekt atribut dəyəri model və açıq şeması kimi tanınan bir şey təsvir etmək üçün istifadə edilə bilər ki, atributları (xassələri, parametrləri) sayı (bir " Müəssisə "və ya" obyekt ") potensial çox böyük deyil, ancaq bir müəssisəyə müraciət edəcək sayı nisbətən təvazökar biridir.
EAV-Django (SQLite və MySQL test) ənənəvi RDBMS ilə gözəl işləyir.
Prioritetləri
proqram online mağaza layihə artıb, belə ki, yalnız bir akademik həyata deyil olduqca praktik edir. Əsas prioritetlər idi:
& Nbsp; 1. Məlumatların rahatlıq,
& Nbsp; 2. sorğu səmərəliliyi və
& Nbsp; 3. kodu redaktə olmadan maksimum Dayanıklılığını.
Əlbəttə, bu ticarət-off nəzərdə tutur, və məqsədi ümumi halda ən az zərərli birləşməsi tapmaq idi.
Xüsusiyyətlər
Bütün təmin modellər, yəni EAV-Django öz cədvəllərdə hər hansı bir məlumat saxlamaq deyil, mücərrəd var. Bunun əvəzinə, o qutusu Eav dəstək olacaq, öz modelləri üçün əsas verir.
EAV API daxildir:
& Nbsp; * / update / çıxış yarat: model hallarda "real" yataqlarının və EAV atributları üçün standart API təmin edir. abstraksiya, lakin yol durmaq və əsas məhsulları ilə məşğul vasitə təmin etmir.
& Nbsp; * Sorğu: BaseEntityManager vahid filter yanaşma () və istisna () sorğu "real" və EAV atributları daxildir.
& Nbsp; * atributları üçün Özelleştirilebilir schemata.
& Nbsp; * Admin: bütün dinamik atributları təmsil və ya az səy (eav.admin.BaseEntityAdmin istifadə) ilə Django admin dəyişdirilə bilər. Schemata adi Django model obyektləri kimi, ayrı-ayrı redaktə edilə bilər.
& Nbsp; * YÖNÜ: qranit axtarış Əsasən istifadəçi bəzi xassələri arzu dəyərlər seçə bilərsiniz ki, model müəyyən alt müvafiq widgets və seçim atributları təmsil edən forma lazımdır və s. Online mağazalar, kataloqlar, əhəmiyyətli bir xüsusiyyət təqdim forma və uyğun maddələr bir siyahısını almaq. Ümumi halda Django-filter edə, lakin EAV-Django üçün alətlər tam təmin edir, belə ki, Eav ilə işləməyəcək.
nümunələri
Ki, bir EAV dostu model müəyyən bir EAV atributu yaratmaq və davranır necə edək. "EAV atributları" Mən ayrı-ayrı obyektlər kimi bazasında saxlanılır, lakin əldə və onlar müəssisənin cədvəldə sütunları sanki belə bir şəkildə axtarış şəxslər başa düşülür:
django.db idxal modelləri
eav.models idxal BaseEntity, BaseSchema, BaseAttribute dən
sinif Meyvə (BaseEntity):
& Nbsp; title = models.CharField (max_length = 50)
class Şema (BaseSchema):
& Nbsp; pass
class Attr (BaseAttribute):
& Nbsp; şeması = models.ForeignKey (Şema, related_name = 'attrs)
Python shell #:
# Atributu "color" adlı define
>>> Color = Schema.objects.create (
... Title = 'Rəng ",
... Name = 'color, # buraxmaq adı / slugify yaşayır
... Datatype = Schema.TYPE_TEXT
...)
# Müəssisəyə yaratmaq
>>> E = Fruit.objects.create (title = 'Apple' color = "yaşıl")
# "Real" müəyyən və EAV eyni şəkildə atributları
>>> E.title
"Apple"
>>> E.colour
"Yaşıl"
>>> Eav ilə e.save () # məşğul avtomatik atributları
Attr hallarda kimi # siyahısı EAV atributları
>>> E.attrs.all ()
[]
Bir EAV atributu ilə # axtarış adi sahədə sanki
>>> Fruit.objects.filter (color = "sarı")
[]
# Bütün mürəkkəb lookups dəstəklənir
>>> Fruit.objects.filter (colour__contains = 'fəğan)
[]
Biz daxil ki, əsl şəxs sahə idi sanki dəyişdirmək və sorğu rəngi, lakin eyni zamanda onun adı, növü və hətta mövcud olması tamamilə Şema instansiya tərəfindən müəyyən edilir unutmayın. A Şema obyekt bir sinif kimi başa, və əlaqədar Attr obyektlərin onun hallarda ola bilər. Başqa sözlə, Şema obyektlərin Charfield, IntegerField və yalnız data səviyyəsində müəyyən, belə, Python sabit kodlu deyil kimi. Onlar (siz məsuliyyət EAV-Django sahəsində kənarda xüsusi məhdudiyyətlər qoymaq halda) hər hansı bir şəxs üçün "instantiated" ola bilər.
atributları adları müvafiq sxem ilə müəyyən edilir. Bu adı dəyişdirildi dəfə kodu pozmaq edir ki, qorxu gətirib çıxara bilər. Adları yalnız birbaşa dərslik lookups üçün istifadə olunur Əslində bu belə deyil. Bütün digər hallarda lookups ağır kodlu adları olmadan inşa edilir, və EAV obyektlərin ilkin düymələri ilə deyil, adları ilə birinə olunur. adları formaları mövcuddur, lakin təhlükəsiz schemata adını dəyişmək olar formaları, metadata hazırkı vəziyyəti asılı olaraq yaradılan olunur. Nə admin interface qıra bilər növləri var. Bir şeması data type dəyişdirmək varsa, bütün atributları eyni qalacaq, lakin onların dəyərlər saxlamaq üçün bir sütun istifadə edəcək. Siz data type bərpa zaman, əvvəllər saxlanılan dəyərlər yenidən görünür.
Daha çox nümunələr üçün test baxın.
Data növləri
Metadata idarə strukturu rahatlıq uzanır, lakin bəzi ticarət-off nəzərdə tutur. Onlardan biri (Buna görə də, yavaş sorğu və) qoşulub sayı artır. Başqa bir az məlumat növləri var. Nəzəri cəhətdən bir saxlanması üçün bütün növ məlumat kömək edə bilər, lakin praktikada yalnız bir neçə istifadə olunur atributu başına çox sütun yaratmaq deməkdir ki, - biz Eav istifadə edərək qarşısını almaq üçün çalışır dəqiq nə. EAV-Django yalnız (lazım gələrsə, bu siyahı uzada bilər baxmayaraq) bir əsas növ dəstəkləyir Buna görə:
& Nbsp; * Schema.TYPE_TEXT, bir TextField;
& Nbsp; * Schema.TYPE_FLOAT bir FloatField;
& Nbsp; * Schema.TYPE_DATE bir DateField;
& Nbsp; * Schema.TYPE_BOOL bir NullBooleanField;
& Nbsp; * Birden çox seçim (dəyərlərin yəni siyahıları) üçün Schema.TYPE_MANY.
Bütün EAV atributları şəxslər və sxem istinadlar unikal birləşməsi ilə bir masa qeydləri kimi saxlanılır. (Entity contenttypes çərçivəsində vasitəsilə müraciət, şeması xarici əsas vasitəsilə müraciət.) Başqa sözlə, verilmiş şəxs və şeması ilə yalnız bir atributu ola bilər. şeması atributu bir müəyyən edilməsidir. şeması adı, adı, data növü və bu sxem hər hansı bir atributu müraciət digər xüsusiyyətləri bir sıra müəyyən edir. Biz EAV atributları daxil olmaq və ya axtarış zaman, EAV maşın həmişə atributları metadata kimi schemata istifadə edir. Niyə? Xüsusiyyətini adı müvafiq şeması saxlanılır və Çünki dəyər atributları masa bir sütun saxlanılır. Biz metadata baxmaq qədər olan sütun bilmirəm.
Biz yuxarıda göstərilən misalda yalnız bir mətn atributu ilə ifa etdik. Bütün digər növ tam TYPE_MANY istisna olmaqla, eyni davranırlar. Bu seçim üçün əlavə model cəlb kimi bir çox-to-çox xüsusi bir haldır. EAV-Django mücərrəd model təmin lakin atributu model ("seçimi" adlı yəni qoymaq xarici əsas) ona konkret model (məsələn seçimi) və point müəyyən etmək tələb olunur. Choice model də Şema qeyd etmək lazımdır. Misal üçün test edin

Bu azad yeni nədir.

  • yaradın / update / çıxış: model hallarda təmin real & quot; quot həm & üçün standart API; sahələri və EAV atributları. abstraksiya, lakin yol durmaq və əsas məhsulları ilə məşğul vasitə təmin etmir.
  • Sorğu: BaseEntityManager filter vahid yanaşma daxildir () və istisna () sorğu və üçün quot; real & quot; və EAV atributları.

  • Atributları üçün
  • Özelleştirilebilir schemata.
  • Admin: bütün dinamik atributları təmsil və ya az səy (eav.admin.BaseEntityAdmin istifadə) ilə Django admin dəyişdirilə bilər. Schemata adi Django model obyektləri kimi, ayrı-ayrı redaktə edilə bilər.
  • YÖNÜ: qranit axtarış Əsasən model müəyyən alt istifadəçi bəzi xassələri arzu dəyərlər seçə bilərsiniz ki, müvafiq widgets və seçim atributları təmsil edən forma lazımdır və s. Online mağazalar, kataloqlar, əhəmiyyətli bir xüsusiyyət təqdim forma və uyğun maddələr bir siyahısını almaq. Ümumi halda Django-filter edə, lakin Eav ilə iş deyil, belə ki, EAV-Django üçün alətlər tam təmin edir.

tələblər

  • Python
  • Django

Geliştirici digər proqram Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Şərh EAV-Django

Şərhlər tapılmadı
Şərh əlavə
Images yandırın!