0

GAE db.Model無法存儲元組列表。因此,我需要將列表保存爲json.dumps字符串,並且在將該列表從實體中拉出時,json.loads該字符串。我想自動執行此操作。這裏是我的嘗試:覆蓋GAE上的__setattr__ db.Model python 2.7

class example(db.Model): 
    someAttr = db.StringListProperty() 
    A = db.StringProperty() 
    B = db.StringProperty() 
    C = db.StringProperty() 

    def __setattr__(self, name, value): 
     #convert json to string for storage 
     if name in ("A", "B", "C"): 
      value = json.dumps(value) 
     #call default set method 
     return super(Quote, self).__setattr__(name, value) 

    def __getattribute__(self, name): 
     #convert string to json for retrieval 
     if name in ("A", "B", "C"): 
      val = super(Quote, self).__getattribute__(name) 
      return json.loads(val) 
     else: 
      # default get behavior 
      return super(Quote, self).__getattribute__(name) 

當我嘗試設置A,B,C實體的屬性,我得到:

BadValueError: Property C must be a str or unicode instance, not a list 
+0

有什麼理由你不只是堅持了整個列表變成一個blob屬性。這將是一個更簡單的練習。 – 2012-07-10 04:14:51

+1

覆蓋模型的getattr/setattr不是實現此目的的方法 - 這是自定義屬性類的用途。或者,按照Sologoub的建議,使用已有的NDB。 – 2012-07-10 09:07:38

回答