EAV-Django

Yazılım ekran görüntüsü:
EAV-Django
Yazılım detaylar:
Versiyon: 1.4.4
Qayıt: 14 Apr 15
Geliştirici: Andrey Mikhaylenko
Lisans: Ücretsiz
Popülerlik: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django Varlık-Özellik-Değer veri modelinin bir uygulamasını sağlar bir yeniden Django uygulaması.
& Nbsp; Varlık-Özellik-Değer modeli (EAV), aynı zamanda durumlarda kullanılan nesne nitelik değeri modeli ve açık şema olarak bilinen yerde bir şey açıklamak için kullanılan bir nitelik (özellikler, parametreler) sayısı (bir " varlık "ya da" nesne ") potansiyel olarak çok büyük olduğunu, ama aslında belirli bir varlık için geçerli olacaktır sayısı nispeten mütevazı.
EAV-Django (SQLite ve MySQL üzerinde test) geleneksel RDBMS ile çalışıyor.
Öncelikler
Uygulama bir online mağaza projesi büyüdü, bu yüzden sadece akademik bir çalışma değildir oldukça pratik ve. temel öncelikleri vardı:
& Nbsp; 1. Verilerin esneklik,
& Nbsp; 2. Sorgu verimliliği ve
& Nbsp; 3. kod düzenleme olmadan maksimum sürdürülebilirlik.
Tabii bu dengeler ima ve amaç genel durum için en az zararlı kombinasyonunu bulmak oldu.
Özellikler
Tüm sağlanan modeller yani EAV-Django kendi tablolarında herhangi bir bilgi saklamak değil, soyut. Bunun yerine, bu kutudan EAV için destek olacak, kendi modelleri için bir temel sağlar.
EAV API içerir:
& Nbsp; * / güncelleme / erişim oluşturun: modeli örnekleri "gerçek" alanları ve EAV nitelikleri hem de standart API sağlar. soyutlama, ancak, engel ve altta yatan şeylerle uğraşmak anlamına gelir sağlar değildir.
& Nbsp; * Sorgu: BaseEntityManager üniforma filtre yaklaşımı () ve hariç () sorgulamak için "gerçek" ve EAV niteliklerini içerir.
& Nbsp; * nitelikleri için Özelleştirilebilir şemaları.
& Nbsp; * Yönetici: tüm dinamik özellikler temsil ve hiçbir ya da küçük bir çaba (eav.admin.BaseEntityAdmin kullanarak) ile Django admin modifiye edilebilir. Schemata sıradan Django modeli nesneleri gibi, ayrı ayrı düzenlenebilir.
& Nbsp; * YÖNÜ: faset arama Temelde kullanıcı bazı özelliklerin arzu değerlerini seçebilirsiniz böylece modelin belirli bir alt kümesi uygun aletler ve seçimler niteliklerini temsil eden bir form gerekir vs. çevrimiçi mağazalar, kataloglar, önemli bir özelliktir, teslim Form ve eşleşen öğelerin bir listesini almak. Genel durum django-filtre olarak yapardı, ama EAV-Django bunun için komple bir araç kümesi sağlar böylece, EAV ile çalışmak olmaz.
Örnekler
En, bir EAV-dostu modeli tanımlamak bir EAV öznitelik oluşturmak ve nasıl davranacağını görelim. "EAV nitelikleri" derken, ayrı nesneler olarak veritabanında saklanır ama erişilebilir ve işletmenin tablodaki sütunları sanki böyle bir şekilde arandı olanlar demek:
django.db ithalat modelleri
eav.models ithalat BaseEntity, BaseSchema, BaseAttribute gelen
Sınıf Meyve (BaseEntity):
& Nbsp, başlıkta adı geçen = models.CharField (MAX_LENGTH = 50)
sınıf Şeması (BaseSchema):
& Nbsp; geçiş
sınıf Attr (BaseAttribute):
& Nbsp; şema = models.ForeignKey (Şema, related_name = 'attrs')
Python kabuğunda içerisinde:
# Nitelik "renk" adlı tanımlamak
>>> Color = Schema.objects.create (
... Title = 'Renkli',
... Isim = 'color', # omit başlığı / slugify doldurmak için
... Veri türü = Schema.TYPE_TEXT
...)
# Bir varlık yaratmak
>>> E = Fruit.objects.create (title = 'Elma', color = 'yeşil')
# "Gerçek" tanımlamak ve EAV aynı şekilde bağlıyor
>>> E.title
'Elma'
>>> E.colour
'Yeşil'
>>> EAV ile e.save () # fiyatları otomatik niteliklerini
Attr örnekleri olarak # listesi EAV özellikleri
>>> E.attrs.all ()
[]
Bir EAV özniteliği tarafından # arama sıradan bir alan sanki
>>> Fruit.objects.filter (color = 'sarı')
[]
# Tüm bileşik aramaları desteklenir
>>> Fruit.objects.filter (colour__contains = 'bağırma')
[]
Biz erişmek gerçek bir varlık alanı olduğu gibi değiştirebilir ve sorgu renk, ama aynı zamanda onun adı, türü ve hatta varlığı tamamen şema örneği tarafından tanımlanan unutmayın. Bir şema nesnesi bir sınıf olarak anlaşılan ve ilgili Attr nesneleri kendi örnekleridir olabilir. Diğer bir deyişle, Şema nesneleri Charfield, IntegerField ve sadece veri düzeyde tanımlandığı gibi, Pythondaki kodlanmış değildir benzerleridir. Ve onlar (siz sorumluluk EAV-Django'nın alanının dışında özel kısıtlamaları koymak sürece) herhangi bir biriminin "örneği" olabilir.
niteliklerin adları, ilgili şema tanımlanır. Bu isim değişti kez, kod kırmaya gidiyor korkularına yol açabilir. Isimler, sadece doğrudan manuel aramalar için kullanılır gibi Aslında bu durum böyle değil. Diğer tüm durumlarda aramaları sabit kodlanmış isimler olmadan inşa edilir, ve EAV nesneleri birincil anahtarlar tarafından değil, isimleri tarafından birbirine bağlıdır. isimleri ise formları mevcut, ancak güvenle schemata yeniden adlandırmak, böylece formlar, meta veri mevcut durumuna bağlı olarak oluşturulan edilir. Ne yönetici arayüzü kırabilir türleri var. Bir şema veri türünü değiştirirseniz, tüm nitelikleri aynı kalacak, ancak kendi değerlerini depolamak için başka bir sütun kullanacaktır. Eğer veri türü geri yüklediğinizde, önceden depolanan değerleri tekrar görebilir.
Daha fazla örnek için testler bakın.
Veri türleri
Meta-odaklı yapı esnekliği uzanır ama bazı dengeler anlamına gelir. Bunlardan biri (bu nedenle, yavaş sorguları ve) JOIN sayısı artar. Başka az veri türleri var. Teorik olarak, bir depolama için mevcut tüm veri türlerini destekler, ancak pratikte sadece birkaç kullanılan ile öznitelik başına kaç sütun oluşturma anlamına gelir - biz EAV kullanarak önlemek için çalışıyorlardı tam olarak ne. EAV-Django sadece (gerekirse bu listeyi uzatabilirsiniz olsa) bazı temel türlerini destekler Bu yüzden:
& 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 fazla seçenek (değerler yani listeleri) için Schema.TYPE_MANY.
Tüm EAV özellikleri varlıklar ve şemalar referans eşsiz kombinasyonu ile bir tablodaki kayıtları olarak depolanır. (Varlık contenttypes çerçevesi yoluyla başvurulan, şema yabancı anahtar aracılığıyla başvurulmaktadır.) Diğer bir deyişle, verilen varlık ve şema ile tek bir özellik olabilir. şema özniteliği bir tanımıdır. şema adı, unvanı, veri türü ve bu şemanın herhangi bir öznitelik için geçerli olan diğer özellikleri bir dizi tanımlar. Biz EAV niteliklerine erişmek veya arama yaptığınızda, EAV makineleri her zaman niteliklerini meta veri olarak şemaları kullanır. Neden? Özelliğin adı, ilgili şemada saklanır, ve çünkü değer nitelikleri tablonun bir sütununda saklanır. Biz metadata bakmak kadar hangi sütun bilmiyorum.
Biz Yukarıda verilen örnekte, yalnızca bir metin özniteliği ile oynadım. Diğer tüm türleri tam TYPE_MANY dışında aynı davranırlar. bu seçimler için ekstra bir modelini kapsayan birçok-çok özel bir durumdur. EAV-Django soyut bir model sunar ama nitelik modeli ("seçim" adlı yani koymak yabancı anahtar) tarafından kendisine somut bir modeli (örn Seçimi), ve noktasını tanımlamak gerektirir. Seçimi modele ayrıca Şema işaret etmek gerekir. Bir örnek testleri kontrol

Bu sürümdeki yeni nedir:.

  • Create / güncelleme / erişim: Model örnekleri sağlamak Gerçek & quot; quot hem & için standart API; alanlar ve EAV özellikleri. soyutlama, ancak, engel ve altta yatan şeylerle uğraşmak anlamına gelir sağlar vermez.
  • Sorgu: BaseEntityManager filtresi üniforma yaklaşım içermektedir () ve hariç () sorgulamak & için quot; gerçek & quot; ve EAV bağlıyor.

  • Öznitelikler için
  • Özelleştirilebilir şemaları.
  • Yönetici: tüm dinamik özellikler temsil ve hiçbir ya da küçük bir çaba (eav.admin.BaseEntityAdmin kullanarak) ile Django admin modifiye edilebilir. Schemata sıradan Django modeli nesneleri gibi, ayrı ayrı düzenlenebilir.
  • YÖNÜ: faset arama Temelde modelin belirli bir alt kümesini kullanıcı bazı özelliklerin arzu değerlerini seçebilirsiniz böylece uygun aletler ve seçimler niteliklerini temsil eden bir form gerekir vs. çevrimiçi mağazalar, kataloglar, önemli bir özelliktir, teslim Form ve eşleşen öğelerin bir listesini almak. Genel durum django-filtre olarak yapardı, ama EAV ile çalışmak olmaz, bu yüzden EAV-Django bunun için komple bir araç kümesi sağlar.

Gereksinimler :

  • Python
  • Django

Geliştirici Diğer yazılım Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Yorumlar EAV-Django

Yorum Bulunamadı
Yorum eklemek
Görüntülerde açın!