Jad*_*ias 5 python google-app-engine foreign-keys google-cloud-datastore
以下代码
class Translation(db.Model):
origin = db.ReferenceProperty(Expression, required=True)
target = db.ReferenceProperty(Expression, required=True)
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
回溯(最近一次调用最后一次):文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第4053行,_HandleRequest self._Dispatch(dispatcher,self.rfile,outfile) ,env_dict)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第3977行,在_Dispatch base_env_dict = env_dict中)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第588行,在Dispatch base_env_dict = base_env_dict中)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",line 3050,在Dispatch self._module_dict)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第2954行,在ExecuteCGI中reset_modules = exec_script(handler_path,cgi_path,hook)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第2834行,在script_module的ExecuteOrImportScript exec module_code中.dict 文件"D:\ svn\language\Web\src\controller.py",第5行,来自模型导入*文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver". py",第1505行,在Decorate中返回func(self,*args,**kwargs)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第2450行,在load_module return self.FindAndLoadModule(submodule,fullname,search_path)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第1505行,在Decorate中返回func(self,*args) ,**kwargs)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第2339行,在FindAndLoadModule描述中)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\tools\dev_appserver.py",第1505行,装饰返回功能(self,*args,**kwargs)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine \在LoadModuleRestricted desc中的tools\dev_appserver.py",第2282行 ription)文件"D:\ svn\language\Web\src\model.py",第24行,在类Translation(db.Model)中:文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\ext\db__init __.py",第500行,在init _initialize_properties(cls,name,bases,dct)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\ext\db__init __.py",line 415,在_initialize_properties attr.property_config(model_class,attr_name)文件"C:\ Program Files(x86)\ Google\google_appengine\google\appengine\ext\db__init __.py",第3461行,在property_config中 self.collection_name))DuplicatePropertyError:Class Expression已经具有属性translation_set
如何规避这个限制?
Abd*_*der 11
提供不同的集合名称
class Translation(db.Model):
origin = db.ReferenceProperty(Expression, required=True,collection_name='origin_translation_set')
target = db.ReferenceProperty(Expression, required=True,collection_name='target_translation_set')
Run Code Online (Sandbox Code Playgroud)
默认情况下,每个db.ReferenceProperty都会在引用的模型中创建名为referencedmodelname_set的集合.
例如:
class OwnedCar(db.Model):
brand = db.StringProperty(required=True)
owner = db.ReferenceProperty(Human, required=True)
class Human(db.Model):
name = db.StringProperty(required=True)
drives = db.ReferenceProperty(reference_class=Car)
Run Code Online (Sandbox Code Playgroud)
默认情况下,每个人都有一个名为ownedcar_set的属性.如果要两次引用同一模型,则会创建collection_name冲突.因此,您应该添加collection_name以区分集合.
更多参考这里
class Translation(db.Model):
origin = db.ReferenceProperty(Expression, required=True, collection_name='translation_origins')
target = db.ReferenceProperty(Expression, required=True, collection_name='translation_targets')
Run Code Online (Sandbox Code Playgroud)
给他们不同的集合名称:
class Translation(db.Model):
origin = db.ReferenceProperty(Expression, required=True,
collection_name='origin_translation_set')
target = db.ReferenceProperty(Expression, required=True,
collection_name='target_translation_set')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
498 次 |
最近记录: |