微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从另一个引用两次相同的模型?

如何解决如何从另一个引用两次相同的模型?

| 以下代码
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 举报,一经查实,本站将立刻删除。