如何解决如何从另一个引用两次相同的模型?
| 以下代码class Translation(db.Model):
origin = db.ReferenceProperty(Expression,required=True)
target = db.ReferenceProperty(Expression,required=True)
产生以下错误:
追溯(最近一次通话):
_HandleRequest中的第4053行,文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”
self._dispatch(调度程序,self.rfile,outfile,env_dict)
_dispatch中的文件“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,行3977
base_env_dict = env_dict)
文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,在dispatch中,第588行
base_env_dict = base_env_dict)
文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,在dispatch中,行3050
self._module_dict)
在ExecuteCGI中的文件“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,
reset_modules = exec_script(handler_path,cgi_path,钩子)
在ExecuteOrImportScript中,文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,行
script_module.dict中的exec module_code
文件\“ D:\\ svn \\ language \\ Web \\ src \\ controller.py \”,第5行,在
从模型导入*
文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,以装饰
return func(self,* args,** kwargs)
在load_module中,文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,第2450行
返回self.FindAndLoadModule(子模块,全名,搜索路径)
文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,以装饰
return func(self,* args,** kwargs)
FindAndLoadModule中的文件“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,
描述)
文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,以装饰
return func(self,* args,** kwargs)
在LoadModuleRestricted中的文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ tools \\ dev_appserver.py \”,行2282
描述)
文件\“ D:\\ svn \\ language \\ Web \\ src \\ model.py \”,第24行,在
类Translation(db.Model):
文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ ext \\ db__init __。py \”,init行
_initialize_properties(CLS,名称,基数,DCT)
_initialize_properties中的第415行,文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ ext \\ db__init __。py \”
attr.property_config(model_class,attr_name)
在Property_config中的第3461行,文件\“ C:\\ Program Files(x86)\\ Google \\ google_appengine \\ google \\ appengine \\ ext \\ db__init __。py \”
self.collection_name))
DuplicatePropertyError:类表达式已经具有属性translation_set
如何规避此限制?
解决方法
class Translation(db.Model):
origin = db.ReferenceProperty(Expression,required=True,collection_name=\'translation_origins\')
target = db.ReferenceProperty(Expression,collection_name=\'translation_targets\')
,给出不同的集合名称
class Translation(db.Model):
origin = db.ReferenceProperty(Expression,collection_name=\'origin_translation_set\')
target = db.ReferenceProperty(Expression,collection_name=\'target_translation_set\')
默认情况下,每个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)
默认情况下,每个人类都将拥有一个默认名为ownercar_set的属性。如果您两次引用同一模型,则会产生collection_name冲突。因此,您应该添加collection_name来区分集合。
在这里更多参考
,为它们指定不同的集合名称:
class Translation(db.Model):
origin = db.ReferenceProperty(Expression,collection_name=\'target_translation_set\')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。