I am using the python standard framework for google app engine and I am running into issues with getting attributes from a model.
Here is my model class for the 'Article' model I am using:
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)
The problem I am getting is that my handler for some reason does not recognize all the model attributes. My handler class is as follows:
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))
For a particular article, logging.info(article) lists the learning_goals attribute. However, when I try to do logging.info(article.learning_goals) or logging.info(article._learning_goal), it gives me the following error:
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'
I have made sure the LearningGoal attribute for articles is indexed, and checked this on both the local dev server and the live app. For some reason, when I try to do a similar query in the interactive console for the local development server, it recognizes the learning_goals attribute for Article. Additionally, it recognizes all the other attributes of the Article model (i.e. methodology, title, etc.). Has anyone else encountered this issue?
Thanks!