Class Expando

Catatan: Developer yang membuat aplikasi baru sangat dianjurkan untuk menggunakan Library Klien NDB, yang memiliki beberapa manfaat dibandingkan dengan library klien ini, seperti menyimpan entity dalam cache secara otomatis melalui Memcache API. Jika saat ini Anda menggunakan Library Klien DB versi lama, baca Panduan Migrasi DB ke NDB

Class Expando adalah superclass untuk definisi model data yang propertinya ditentukan secara dinamis. Model Expando dapat memiliki kombinasi properti tetap yang mirip dengan Model dan properti dinamis yang ditetapkan ke entity saat run-time.

Expando disediakan oleh modul google.appengine.ext.db.

Expando adalah subclass Model, dan mewarisi class serta metode instance dari class tersebut. Class Expando tidak menentukan atau mengganti metode apa pun.

Pengantar

Model Expando dapat memiliki properti tetap dan properti dinamis. Properti tetap berperilaku mirip dengan properti Model, dan ditentukan dengan cara serupa dalam class model Expando menggunakan atribut class. Properti dinamis dibuat ketika mereka diberi nilai pada instance. Dua instance class Expando yang sama dapat memiliki kumpulan properti dinamis yang berbeda, dan bahkan dapat memiliki properti dinamis dengan nama yang sama namun jenisnya berbeda. Properti dinamis selalu bersifat opsional, dan tidak memiliki nilai default: Properti tidak ada sampai properti tersebut diberi nilai.

Properti dinamis tidak dapat menggunakan instance Properti untuk melakukan validasi, menetapkan setelan default, atau menerapkan logika otomatis ke nilai. Properti dinamis hanya menyimpan nilai dari jenis datastore yang didukung. Lihat Jenis dan Properti Class.

Selain itu, tidak seperti properti tetap, properti dinamis tidak boleh menggunakan nama yang berbeda untuk atribut class dan nama properti datastore. Lihat Nama Properti yang Tidak Diizinkan.

Tips: Jika ingin memvalidasi nilai properti dinamis menggunakan class Properti, Anda dapat membuat instance class Properti dan memanggil metode validate() pada nilai.

Subclass Expando dapat menentukan properti tetap yang mirip dengan class Model. Properti tetap Expando berperilaku mirip dengan properti Model. Instance Expando dapat memiliki properti tetap dan dinamis.

import datetime

from google.appengine.ext import db

class Song(db.Expando):
    title = db.StringProperty()

crazy = Song(title='Crazy like a diamond',
             author='Lucy Sky',
             publish_date='yesterday',
             rating=5.0)

hoboken = Song(title='The man from Hoboken',
               author=['Anthony', 'Lou'],
               publish_date=datetime.datetime(1977, 5, 3))

crazy.last_minute_note=db.Text('Get a train to the station.')

Properti dinamis (tidak tetap) pada instance Expando dapat dihapus. Untuk menghapus properti dinamis, aplikasi menghapus atribut instance:

del crazy.last_minute_note

Konstruktor

Konstruktor class Expando didefinisikan sebagai berikut:

class Expando(parent=None, key_name=None, **kwds)

Class model yang propertinya tidak perlu ditentukan di class sebelum digunakan. Seperti Model, class Expando harus di-subclass-kan untuk menentukan jenis entity data.

Expando adalah subclass Model, dan mewarisi atau mengganti metodenya.

Argumen

parent
Instance Model atau instance Key untuk entity yang merupakan induk entity baru.
key_name

Nama untuk entity baru. Nama akan menjadi bagian dari kunci utama. Jika None, ID yang dibuat sistem akan digunakan untuk kunci tersebut.

Nilai untuk key_name tidak boleh diawali dengan angka, dan tidak boleh berupa __*__. Jika aplikasi Anda menggunakan data yang dikirim pengguna sebagai nama kunci entity datastore (seperti alamat email), aplikasi harus membersihkan nilai tersebut terlebih dahulu, seperti dengan mengawalinya dengan string yang dikenal seperti "key:", untuk memenuhi persyaratan ini.

key_name disimpan sebagai string Unicode, dengan nilai str yang dikonversi sebagai teks ASCII.

**kwds
Nilai awal untuk properti instance, sebagai argumen kata kunci. Setiap nama terkait dengan atribut instance baru, dan dapat sesuai dengan properti tetap yang ditentukan di class Expando, atau berupa properti dinamis.