我幾乎保證這是簡單的。我正在嘗試創建一個通用屬性來包裝Django文本/ blob字段。這不是Django特有的,它只是一個設計問題。我有一些類級別的變量,並使用僞代理來重用解碼方法。Python「通用」類屬性編碼/解碼
class DBTable(models.Model):
class Meta:
db_table="some_table"
def set_data(self, data):
att = self.__getattribute__(data.__name__)
att = base64.encodestring(data)
def get_data(self,prop):
def func(self):
att = self.__getattribute__(prop)
return base64.decodestring(att)
return func
#issue is here, i need to pass self to get_data
blob_a = property(get_data("blob_a"), set_data)
blob_b = property(get_data('blob_b'), set_data)
而且問題涉及上述兩行,我需要通過自我。我曾嘗試過使用該課程,但無法識別。
很簡單,上面的問題通過拔出來解決,下面是最終的工作解決方案。
def encode_data(self, data):
def func(self,data):
self.__setattr__(prop, base64.encodestring(data))
return func
def decode_data(self,prop):
def func(self):
att = self.__getattribute__(prop)
return base64.decodestring(att)
return func
class DBTable(models.Model):
class Meta:
db_table="some_table"
blob_a = property(decode_data("_blob_a"), encode_data("_blob_a"))
blob_b = property(decode_data('_blob_b'), encode_data("_blob_b"))
_blob_a = models.TextField(
db_column='blob_a',
blank=True)
_blob_b = models.TextField(
db_column='blob_b',
blank=True)
在你的最終解決方案,是如何'get_data'和'set_data'界定? – unutbu 2011-04-26 14:10:28
我有一個錯字,我將它們重命名爲編碼/解碼。然而,它不是最終的但BC我處於一個無限循環,它基本上遞歸調用setattr。現在就開始工作。 – Nix 2011-04-26 14:14:44