EAV-Django

Software screenshot:
EAV-Django
Rincian Software:
Versi: 1.4.4
Tanggal Upload: 14 Apr 15
Pengembang: Andrey Mikhaylenko
Lisensi: Gratis
Popularitas: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django adalah aplikasi Django dapat digunakan kembali yang menyediakan implementasi dari model data Badan-Atribut-Nilai.
& Nbsp; Model Entity-Atribut-Nilai (EAV), juga dikenal sebagai model objek-atribut-nilai dan skema terbuka yang digunakan dalam keadaan di mana jumlah atribut (properti, parameter) yang dapat digunakan untuk menggambarkan sesuatu (sebuah " entitas "atau" objek ") berpotensi sangat besar, namun jumlah yang benar-benar akan berlaku untuk entitas tertentu relatif sederhana.
EAV-Django bekerja dengan baik dengan RDBMS tradisional (diuji pada SQLite dan MySQL).
Prioritas
Aplikasi tumbuh dari sebuah proyek toko online, sehingga cukup praktis dan bukan hanya latihan akademis. Prioritas utama adalah:
& Nbsp; 1. fleksibilitas data,
& Nbsp; 2. efisiensi query, dan
& Nbsp; 3. rawatan maksimal tanpa mengedit kode.
Tentu saja hal ini menyiratkan trade-off, dan tujuannya adalah untuk menemukan kombinasi paling tidak berbahaya untuk kasus umum.
Fitur
Semua model yang disediakan abstrak, yaitu EAV-Django tidak menyimpan informasi dalam tabel sendiri. Sebaliknya, ia menyediakan dasar untuk model Anda sendiri yang akan memiliki dukungan untuk EAV keluar dari kotak.
The EAV API meliputi:
& Nbsp; * Buat / update / akses: contoh model yang menyediakan API standar untuk kedua bidang "nyata" dan EAV atribut. Abstraksi, bagaimanapun, tidak berdiri di jalan Anda dan memberikan sarana untuk berurusan dengan hal-hal yang mendasari.
& Nbsp; * Query: BaseEntityManager termasuk pendekatan yang seragam dalam filter () dan belum termasuk () untuk query "nyata" dan EAV atribut.
& Nbsp; * schemata Customizable untuk atribut.
& Nbsp; * Admin: semua atribut dinamis dapat diwakili dan dimodifikasi di admin Django tanpa atau sedikit usaha (menggunakan eav.admin.BaseEntityAdmin). Schemata dapat diedit secara terpisah, sebagai model benda Django biasa.
& Nbsp; * Facets: cari segi merupakan fitur penting dari toko online, katalog, dll Pada dasarnya Anda akan memerlukan formulir mewakili subset tertentu model atribut dengan widget yang tepat dan pilihan sehingga pengguna dapat memilih nilai-nilai yang diinginkan dari beberapa properti, kirimkan bentuk dan mendapatkan daftar item yang sesuai. Dalam kasus umum Django-filter akan lakukan, tapi itu tidak akan bekerja dengan EAV, sehingga EAV-Django menyediakan satu set lengkap alat untuk itu.
Contoh
Mari kita mendefinisikan model ramah EAV, membuat atribut EAV dan melihat bagaimana berperilaku. Dengan "atribut EAV" Maksudku yang disimpan dalam database sebagai objek yang terpisah tetapi diakses dan dicari sedemikian rupa seolah-olah mereka kolom dalam tabel entitas:
dari model impor django.db
dari eav.models impor BaseEntity, BaseSchema, BaseAttribute
Kelas Buah (BaseEntity):
& Nbsp; title = models.CharField (max_length = 50)
Kelas Skema (BaseSchema):
& Nbsp; lulus
Kelas Attr (BaseAttribute):
& Nbsp; skema = models.ForeignKey (Skema, related_name = 'attrs')
# Di Python shell:
# Mendefinisikan atribut bernama "warna"
>>> Color = Schema.objects.create (
... Title = 'Warna',
... Name = 'warna', # abaikan untuk mengisi / slugify dari judul
... Datatype = Schema.TYPE_TEXT
...)
# Membuat entitas
>>> E = Fruit.objects.create (title = 'Apple', warna = 'hijau')
# Mendefinisikan "nyata" dan EAV atribut dengan cara yang sama
>>> E.title
'Apple'
>>> E.colour
'Hijau'
>>> E.save () # penawaran dengan EAV atribut secara otomatis
Atribut EAV # daftar sebagai contoh Attr
>>> E.attrs.all ()
[]
# Pencarian dengan atribut EAV seolah-olah itu adalah bidang biasa
>>> Fruit.objects.filter (color = "yellow ')
[]
# Semua pencarian senyawa yang didukung
>>> Fruit.objects.filter (colour__contains = 'berteriak')
[]
Perhatikan bahwa kita dapat mengakses, memodifikasi dan warna permintaan seolah-olah itu adalah bidang Badan benar, tetapi pada saat yang sama namanya, jenis dan bahkan keberadaan-benar ditentukan oleh contoh Skema. Sebuah objek Skema dapat dipahami sebagai sebuah kelas, dan objek Attr terkait adalah contoh nya. Dengan kata lain, benda Skema seperti CharField, IntegerField dan semacamnya, hanya didefinisikan pada tingkat data, tidak sulit-kode di Python. Dan mereka bisa "dipakai" untuk setiap Entity (kecuali Anda menempatkan kendala kustom yang berada di luar wilayah EAV-Django tanggung jawab).
Nama-nama atribut didefinisikan dalam skema terkait. Hal ini dapat menyebabkan kekhawatiran bahwa setelah nama berubah, kode ini akan memecahkan. Sebenarnya hal ini tidak terjadi karena nama hanya langsung digunakan untuk pencarian manual. Dalam semua kasus lain pencarian dibangun tanpa nama dikodekan keras, dan benda-benda EAV ini saling terhubung dengan kunci primer, bukan dengan nama. Nama-nama yang hadir jika bentuk, tetapi bentuk-bentuk yang dihasilkan tergantung pada keadaan saat metadata, sehingga Anda dapat dengan aman mengubah nama skema tersebut. Apa yang dapat Anda istirahat dari antarmuka admin adalah jenis. Jika Anda mengubah jenis data skema, semua atribut yang akan tetap sama tapi akan menggunakan kolom lain untuk menyimpan nilai-nilai mereka. Ketika Anda mengembalikan tipe data, nilai-nilai yang tersimpan sebelumnya terlihat lagi.
Lihat tes untuk lebih banyak contoh.
Tipe data
Struktur Metadata-driven meluas fleksibilitas tetapi menyiratkan beberapa trade-off. Salah satunya adalah peningkatan jumlah bergabung (dan, karena itu, permintaan lebih lambat). Lain adalah tipe data yang lebih sedikit. Secara teoritis, kita dapat mendukung semua jenis data yang tersedia untuk penyimpanan, tetapi dalam prakteknya itu berarti menciptakan banyak kolom per atribut dengan hanya beberapa yang digunakan - persis apa yang kita berusaha untuk menghindari dengan menggunakan EAV. Inilah sebabnya mengapa EAV-Django hanya mendukung beberapa tipe dasar (meskipun Anda dapat memperpanjang daftar ini jika diperlukan):
& Nbsp; * Schema.TYPE_TEXT, TextField;
& Nbsp; * Schema.TYPE_FLOAT, sebuah FloatField;
& Nbsp; * Schema.TYPE_DATE, sebuah DateField;
& Nbsp; * Schema.TYPE_BOOL, sebuah NullBooleanField;
& Nbsp; * Schema.TYPE_MANY untuk beberapa pilihan (yaitu daftar nilai).
Semua atribut EAV disimpan sebagai catatan dalam tabel dengan kombinasi unik dari referensi entitas dan skema. (Entity direferensikan melalui kerangka ContentTypes, skema direferensikan melalui kunci asing.) Dengan kata lain, hanya ada satu atribut dengan entitas yang diberikan dan skema. Skema adalah definisi atribut. Mendefinisikan skema nama, judul, tipe data dan sejumlah properti lain yang berlaku untuk setiap atribut skema ini. Ketika kita mengakses atau mencari atribut EAV, mesin EAV selalu menggunakan skema sebagai atribut metadata. Mengapa? Karena nama atribut yang disimpan dalam skema terkait, dan nilai yang disimpan dalam kolom tabel atribut. Kita tidak tahu mana kolom itu sampai kita melihat metadata.
Pada contoh yang diberikan di atas kita hanya bermain dengan atribut teks. Semua jenis lain berperilaku persis sama kecuali untuk TYPE_MANY. Banyak-ke-banyak adalah kasus khusus karena melibatkan model tambahan untuk pilihan. EAV-Django menyediakan model abstrak tapi mengharuskan Anda untuk menentukan model beton (misalnya Choice), dan titik untuk itu dari atribut model (yaitu memasukkan kunci asing bernama "pilihan"). Model Choice juga harus menunjuk Skema. Periksa tes untuk contoh

Apa yang baru dalam rilis ini:.

  • Buat / update / akses: contoh model yang menyediakan standart API untuk kedua & quot; nyata & quot; bidang dan atribut EAV. Abstraksi, bagaimanapun, tidak berdiri di jalan Anda dan memberikan sarana untuk berurusan dengan hal-hal yang mendasari.
  • Query: BaseEntityManager termasuk pendekatan yang seragam dalam filter () dan belum termasuk () untuk query & quot; nyata & quot; dan EAV atribut.
  • schemata Customizable untuk atribut
  • .
  • Admin: semua atribut dinamis dapat diwakili dan dimodifikasi di admin Django tanpa atau sedikit usaha (menggunakan eav.admin.BaseEntityAdmin). Schemata dapat diedit secara terpisah, sebagai model benda Django biasa.
  • Facets: cari segi merupakan fitur penting dari toko online, katalog, dll Pada dasarnya Anda akan memerlukan bentuk yang mewakili subset tertentu model atribut dengan widget yang tepat dan pilihan sehingga pengguna dapat memilih nilai-nilai yang diinginkan dari beberapa properti, kirimkan bentuk dan mendapatkan daftar item yang sesuai. Dalam kasus umum Django-filter akan lakukan, tapi itu tidak akan bekerja dengan EAV, sehingga EAV-Django menyediakan satu set lengkap alat untuk itu.

Persyaratan :

  • Python
  • Django

Perangkat lunak lain dari pengembang Andrey Mikhaylenko

Timetra
Timetra

14 Apr 15

Monk
Monk

14 May 15

Komentar untuk EAV-Django

Komentar tidak ditemukan
Tambahkan komentar
Aktifkan gambar!