This is ridicolously trivial but i’ve spent half an hour trying to solve it.
class SocialPost(model.Model):
total_comments=model.IntegerProperty(default=0)
def create_reply_comment(self,content,author):
...
logging.info(self)
self.total_comments=self.total_comments+1
self.put()
In the logfile, i can see how total_comments is 0 but in the admin console, it is 1. The other fields are correct, except for this one.
Probably there’s something wrong in that “default=0” but i can’t find what is wrong.
Edit: full code of my function
def create_reply_comment(self,content,author):
floodControl=memcache.get(“FloodControl-“+str(author.key))
if floodControl:
raise base.FloodControlException
new_comment= SocialComment(parent=self.key)
new_comment.author=author.key
new_comment.content=content
new_comment.put()
logging.info(self)
self.latest_comment_date=new_comment.creation_date
self.latest_comment=new_comment.key
self.total_comments=self.total_comments+1
self.put()
memcache.add("FloodControl-"+str(author.key), datetime.now(),time=SOCIAL_FLOOD_TIME)
Where i call the function:
if cmd == "create_reply_post":
post=memcache.get("SocialPost-"+str(self.request.get('post')))
if post is None:
post=model.Key(urlsafe=self.request.get('post')).get()
memcache.add("SocialPost-"+str(self.request.get('post')),post)
node=node.get()
if not node.get_subscription(user).can_reply:
self.success()
return
post.create_reply_comment(feedparser._sanitizeHTML(self.request.get("content"),"UTF-8"),user)
You’re calling memcache.add before you make your change to total_comments, so when you read it back from memcache on subsequent calls, you’re getting an out-of-date value from the cache. Your create_reply_comment needs to either delete or overwrite the
"SocialPost-"+str(self.request.get('post')cache key.[edit] Though your post title says you’re using NDB (model.Model though? Hmm.), so you could just skip the memcache bits entirely, and let NDB do it’s thing?