首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AttributeError:“对象没有属性”“learning_goals”“--无法识别特定模型的属性”“

AttributeError:“对象没有属性”“learning_goals”“--无法识别特定模型的属性”“
EN

Stack Overflow用户
提问于 2017-08-10 02:28:43
回答 1查看 158关注 0票数 1

我正在为google app engine使用python标准框架,并且在从模型获取属性时遇到了问题。

下面是我正在使用的“文章”模型的模型类:

代码语言:javascript
运行
复制
class Article(ndb.Model):
  # Entry metadata
  timestamp = ndb.KeyProperty(kind='Timestamp', repeated=True)

  # Article metadata
  authors = ndb.KeyProperty(kind='Author', repeated=True)
  title = ndb.StringProperty(indexed=False)
  journal = ndb.StringProperty(indexed=False)
  volume = ndb.StringProperty(indexed=False)
  number = ndb.StringProperty(indexed=False)
  pages = ndb.StringProperty(indexed=False)
  year = ndb.IntegerProperty(indexed=True)
  publisher =  ndb.StringProperty(indexed=False)
  # Methodology
  methodology = ndb.KeyProperty(kind='Methodology')
  learning_goals = ndb.KeyProperty(kind='LearningGoal', repeated=True, indexed=True)

  # Summary data
  type = ndb.StringProperty(indexed=True,choices=['Theoretical','Empirical','Review Article','Taxonomy Development','Practitioner', 'Other'], repeated=True)
  star = ndb.BooleanProperty(indexed=True,default=False)
  purpose = ndb.TextProperty(default="")
  findings = ndb.TextProperty(default="")
  recommendations = ndb.StringProperty(default="")
  citation = ndb.TextProperty(default="")
  audience = ndb.StringProperty(choices=['Practitioner', 'Researcher', 'Developer', 'Administrator', 'Other'], repeated=True)


  @property
  def author_names(self):
    return ndb.get_multi(self.authors)

  @property
 def _methodology(self):
    if self.methodology == None:
      methodology = Methodology()
      self.methodology = methodology.key
    else:
      methodology = self.methodology.get()
    return methodology


  @property
  def _learning_goal(self):
    return ndb.get_multi(self.learning_goals)

我遇到的问题是,由于某种原因,我的处理程序无法识别所有的模型属性。我的处理程序类如下:

代码语言:javascript
运行
复制
class ArticleCategoryHandler(webapp2.RequestHandler):
  def get(self,key):
    """ This is """
    article = ndb.Key(urlsafe=key).get()
    logging.info(article)
    logging.info('\n')
    template_values = {
      'key': key,
      'application_url': self.request.application_url,
      'user': users.get_current_user(),
      'url': users.create_logout_url(self.request.uri),
      'url_linktext': "Logout",
      'article': article,
      'categories': ['summary','learning-goals','methodology']
    }

    template = JINJA_ENVIRONMENT.get_template('templates/admin_category.html')
    self.response.write(template.render(template_values))

对于特定的文章,logging.info(文章)列出了learning_goals属性。但是,当我尝试执行logging.info(article.learning_goals)或logging.info(article._learning_goal)时,出现以下错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "/home/noah-banholzer/summer_research_2017/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/noah-banholzer/summer_research_2017/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/noah-banholzer/summer_research_2017/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/noah-banholzer/summer_research_2017/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/home/noah-banholzer/summer_research_2017/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/home/noah-banholzer/summer_research_2017/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/home/noah-banholzer/summer_research_2017/everydaycomputing.org/site_database/admin_category.py", line 22, in get
    logging.info(article.learning_goals)
AttributeError: 'Article' object has no attribute 'learning_goals'

我已经确保文章的LearningGoal属性被编入索引,并在本地开发服务器和实时应用程序上检查了这一点。由于某些原因,当我尝试在本地开发服务器的交互式控制台中执行类似的查询时,它识别出文章的learning_goals属性。此外,它还识别文章模型的所有其他属性(即方法、标题等)。还有人遇到过这个问题吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-08-10 03:07:26

服务在代码级完全相互隔离。来自App Engine Services as microservices

在App Engine项目中,您可以将多个微服务部署为单独的services,以前在App Engine中称为模块。这些服务具有完全的代码隔离;在这些服务中执行代码的唯一方法是通过HTTP调用,例如用户请求或RESTful应用编程接口调用。一个服务中的代码不能直接调用另一个服务中的代码。代码可以独立部署到服务中,不同的服务可以用不同的语言编写,例如Python、Java、Go和PHP。自动伸缩、负载均衡和机器实例类型都是独立管理的服务。

这意味着您必须显式地实现一种在需要访问相同实体类型的不同服务之间共享数据存储模型的方法。

我的建议是在每个服务中使用符号链接的模型定义的文件,请参阅Sharing entities between App Engine modules,也许还有Communicating between google app engine services

非常重要的一点是,无论何时模型发生变化,都要重新部署共享模型的所有服务,否则,未重新部署的服务将使用过时的模型定义运行,从而为您报告的错误留下空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45598161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档