什么是在App Engine相当于本Django的声明?

return Post.objects.get(created_at__year=bits[0], 
                            created_at__month=bits[1], 
                            created_at__day=bits[2],
                            slug__iexact=bits[3])

我已经结束了写这个:

Post.gql('WHERE created_at > DATE(:1, :2, :3) AND created_at < DATE(:1, :2, :4) and slug = :5',
    int(bit[0]), int(bit[1]), int(bit[2]), int(bit[2]) + 1, bit[3])

但相对于Django的这是很可怕的。任何其他更Python / Django的魔方式,例如与Post.filter()created_at.day/month/year属性?

有帮助吗?

解决方案

您不需要“relativedelta” - 你的描述是一个datetime.timedelta。否则,你的答案看起来不错。

至于处理时间的推移,关于App Engine上好处是,几乎所有的查询具有相同的成本每结果 - 和所有的人比例缩放到返回的记录,而不是总的数据存储大小。因此,您的解决方案正常工作。

另外,如果你需要你的一个不等式过滤器别的东西,你可以添加一个“created_day” DateProperty,并做一个简单的平等检查。

其他提示

如何
from datetime import datetime, timedelta

created_start = datetime(year, month, day)
created_end = created_start + timedelta(days=1)
slug_value = 'my-slug-value'

posts = Post.all()
posts.filter('created_at >=', created_start)
posts.filter('created_at <', created_end)
posts.filter('slug =', slug_value)

# You can iterate over this query set just like a list
for post in posts:
    print post.key()

结束了使用的relativedelta库+链接使用jQuery风格的过滤器,虽然没有过多Python的呢,是一点点更舒适的编写和多机。如果是做的最好的方式,因为它可能会需要更多的数据库处理时间:)仍不能确定?

date = datetime(int(year), int(month), int(day))
... # then
queryset = Post.objects_published()
                            .filter('created_at >=', date)
                            .filter('created_at <', date + relativedelta(days=+1))
                            ...

和传递蛞蝓到object_detail视图或另一个过滤器。

这是你可以使用datetime.timedelta的方式。这可以让你发现日期范围或日期增量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top