わかった。
だから私は、他の Python オブジェクトへの参照を保存したいデータベースを持っています (現在、私はビールのレシピ原料の個人店の在庫情報を保存するために使用しています)。
成分には約 15 ~ 20 の異なるカテゴリがあるため (すべて個々の SQLObject によって表されます)、RelatedJoin 列の束を作成したくありません。そのまま「pythonic」ソリューション。
だから今私はこれをやっています:
class Inventory(SQLObject):
inventory_item_id = IntCol(default=0)
amount = DecimalCol(size=6, precision=2, default=0)
amount_units = IntCol(default=Measure.GM)
purchased_on = DateCol(default=datetime.now())
purchased_from = UnicodeCol(default=None, length=256)
price = CurrencyCol(default=0)
notes = UnicodeCol(default=None)
inventory_type = UnicodeCol(default=None)
def _get_name(self):
return eval(self.inventory_type).get(self.inventory_item_id).name
def _set_inventory_item_id(self, value):
self.inventory_type = value.__class__.__name__
self._SO_set_inventory_item_id(value.id)
eval()
_get_name() メソッドの ICKY に注意してください。
__class__.__name__
を使用せずに取得している文字列によって参照される SQLObject クラスを呼び出すにはどうすればよいeval()
ですか? それとも、これは利用するのに適切な場所eval()
ですか? (私は、使用するのが適切ではないという考え方のようなものですeval()
-しかし、システムはエンドユーザーの入力を決して使用しないため、eval()
「安全」に見えます。)