2017-11-07 14 views
0

私はGoogleのデータストアにクラスのユニークを強制する必要があります。ここで私は一意Googleデータストアで一意のデータストアエンティティの複製を作成するにはどうすればよいですか?

from google.appengine.ext import ndb 
from webapp2_extras.appengine.auth.models import Unique 


class UserTag(ndb.Model)): 
    user_key = ndb.KeyProperty(kind='User', required=True) 
    name = ndb.StringProperty() 

    def _pre_put_hook(self): 
     super(UserTag, self)._pre_put_hook() 
     success = Unique.create(self.user_key) 
     if not success: 
      raise Exception('Cannot create unique key: %s' % unique_key) 

私はUserTagのインスタンスが変更されるたびarchive名前空間にUserTagのバージョンを維持したいまでは正常に動作を強制する方法です。

cloned_user_tag = UserTag(user_key=orig.user_key, name=orig.name, namespace='archive') 
cloned_user_tag.put(cloned_user_tag) # throw exception 

はその後例外は、この問題を回避する最善の方法は何

Exception: Cannot create unique key: UserTag:123 

をスローされますか?一意性強制を一時的に中断する最善の方法は何ですか?名前空間がarchiveが、

1であれば多分私はどのように私は、現在の名前空間に

2を知ることができます)Unique.createをスキップすることができます)私はあなたが_pre_put_hook()内の名前空間を確認することができると信じて、より良い解決策

答えて

0

がありますこのように:

def _pre_put_hook(self): 
     super(UserTag, self)._pre_put_hook()   
     if self._key.namespace() != 'archive': 
      success = Unique.create(self.user_key) 
      if not success: 
       raise Exception('Cannot create unique key: %s' % unique_key) 
関連する問題