2011-09-16 33 views
1

我有這個類,我想使用手機作爲關鍵。關鍵是從表格輸入 task.phone = self.request.get('phone')。我尋找答案,但唯一的,我發現它是從代碼內部(如任務=(電話= 5555))。谷歌應用引擎中的類變量設置鍵

class task(db.Model): 
    name = db.StringProperty() 
    lanme = db.StringProperty() 
    phone = db.StringProperty() 
    adress = db.StringProperty() 
    visits = db.IntegerProperty() 

回答

1

一個簡單的解決辦法是:

task = task(key_name=adress) 

更高級的一個是:

class task(db.Model): 
    ... 
    def __init__(self, *args, **kwargs): 
     kwargs['key_name'] = kwargs['adress'] 
     db.Model.__init__(self, *args, **kwargs) 

但是你要記住什麼是AppEngine上不使用特定的領域作爲關鍵,總會有一個關鍵,可能會或可能不匹配一個特定的領域。如果它們是相同的,那就是「巧合」。作爲一般性建議,請保持原樣。有些問題你可能沒有考慮到,比如密鑰的唯一性和覆蓋它們。

夫婦的旁註:

  1. 類的名稱應該是任務不任務
  2. 這是地址不ADRESS
+0

關於你的筆記,這是從快速打字。我想要這個密鑰,因爲我想使用get_or_insert(),例如,如果我輸入一個手機(即)555,這已經存儲,我不想再添加他,但要更新訪問(即)+2 + 3什麼.. 這是我的問題關於這個http://stackoverflow.com/q/7441456/948322。但是謝謝你! –

+0

請勿重寫模型上的__init__。這很容易出錯,並且對db API的改變可能會導致它崩潰。事實上,我很確定你的示例已經破壞,並且在API重新構建數據存儲中的實例時將失敗。 –

+0

@Nick Johnson是的,我知道,但我真的不知道任何其他方式來做到這一點http://stackoverflow.com/q/7441456/948322問題。如果可以的話,看看。 –