我的模特
class BaseArticleModel(polymodel.PolyModel):
title = db.StringProperty()
created_at = db.DateProperty(auto_now_add=True)
updated_at = db.DateProperty(auto_now=True)
class News(BaseArticleModel):
body = db.TextProperty()
我需要在上个月获得行。我使用交互式控制台。什么时候做这样的过滤
q = News.all().filter('created_at.month = ',datetime(2011,04,01).month)
print q[0].title
我得到"IndexError: The query returned fewer than 1 results"
答案 0 :(得分:3)
我在谷歌应用引擎小组中获得了类似你的解决方案。
class BaseArticleModel(polymodel.PolyModel):
title = db.StringProperty()
created_at = db.DateProperty(auto_now_add=True)
updated_at = db.DateProperty(auto_now=True)
@db.ComputedProperty
def CM(self):
return self.created_at.month
答案 1 :(得分:1)
要基于一个月进行查询,我建议您在模型中添加一个额外的派生字段,该字段会在保存对象时自动更新:
class BaseArticleModel(polymodel.PolyModel):
title = db.StringProperty()
created_at = db.DateProperty(auto_now_add=True)
updated_at = db.DateProperty(auto_now=True)
# will be auto-generated
created_at_month = db.IntegerProperty()
def put(self, *args, **kwargs):
self.created_at_month = self.created_at.month
super(BaseArticleModel, self).put(*args, **kwargs)
修改:重新阅读您的问题,看起来您并不是真的在寻找某个月的所有帖子(例如任何一年的10月),而只是在一个月内发帖。如果是这种情况,那么您应该能够将查询修改为简单比较:
# get News posted in April, 2011
all_news = News.all()
all_news.filter('created_at >=', datetime(2011, 4, 1))
all_news.filter('created_at <', datetime(2011, 5, 1))
编辑#2 :As noted by Nick below,覆盖put()
将是错误的形式,因为它仅在作为绑定方法调用时才有效,并且不适用于{ {1}}或其他保存到数据存储区的方法。