dolmen.relations adalah lapisan tipis di atas zc.relation, memungkinkan implementasi sederhana dan mudah hubungan mandiri antara objek.
Persiapan
Dalam rangka untuk menunjukkan fitur paket ini, pertama-tama kita mengatur lingkungan waras:
>>> Dari zope komponen impor
>>> Dari zope.container.btree impor BTreeContainer
>>> Sm = component.getGlobalSiteManager ()
>>> Kawanan = getRootFolder () ['kawanan'] = BTreeContainer ()
Katalog Hubungan
dolmen.relations menyediakan komponen yang disebut RelationCatalog yang bertugas mendaftarkan hubungan dan menemukan mereka:
>>> Dari dolmen.relations mengimpor RelationCatalog, ICatalog
>>> Sm.registerUtility (RelationCatalog (), ICatalog)
Hubungan kontainer
Untuk menyimpan hubungan dan memicu peristiwa yang dibutuhkan, dolmen.relations menyediakan wadah btree:
>>> Dari dolmen.relations impor RelationsContainer
>>> Hubungan = kawanan ['_ hubungan'] = RelationsContainer ()
konten
Sekarang, kita perlu beberapa konten untuk memulai. Tes modul mendefinisikan objek persisten Mammoth yang kita akan gunakan di sini:
>>> Dari dolmen.relations.tests mengimpor Mammoth
>>> Manfred = kawanan ['manfred'] = Mammoth ()
>>> Gunther = kawanan ['gunther'] = Mammoth ()
Untuk memastikan bahwa benda kami akan bertahan dan akan diberikan id int, kami berkomitmen:
>>> Transaksi impor
>>> Transaction.Commit ()
Hubungan
Hubungan yang diusulkan oleh dolmen.relations adalah dari "A ke B" jenis. Mereka memungkinkan Anda untuk menghubungkan objek sumber dengan objek target. Untuk tujuan tes, kita akan membuat dua benda Mammoth yang akan digunakan sebagai sumber dan target:
>>> Dari dolmen.relations nilai impor, setiap
>>> Dari IIntIds zope.intid.interfaces impor
>>> Ids = component.getUtility (IIntIds)
>>> Rcatalog = component.getUtility (ICatalog)
>>> Gunther_id = ids.getId (gunther)
>>> Manfred_id = ids.getId (manfred)
hubungan Simple
Yang pertama dan simpliest jenis relasinya adalah RelationValue. Hubungan ini dibuat dengan id sumber dan target id:
>>> Hubungan ["sederhana"] = values.RelationValue (gunther_id, manfred_id)
Anda dapat query hubungan dengan memberikan target dan / atau sumber id:
>>> Ditemukan = daftar (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Ditemukan
[
Apa yang baru dalam rilis ini:
- Menangkap kesalahan dari intids ketika ID telah dihapus. Kembali ada dalam kasus ini.
Persyaratan :
- Python
Komentar tidak ditemukan