2011-05-23 153 views
1

我有一个简单的模型:如何限制Google App Engine中的Django-Nonrel查询结果集?

class News(models.Model): 

    title = models.CharField(max_length=255, verbose_name=_("title")) 
    content = models.TextField(default='', verbose_name=_("content")) 
    panel = models.CharField(max_length=50, default='', verbose_name=_("panel")) 
    created = TzDateTimeProperty(auto_now_add=True, verbose_name=_("date created")) 
    lastmodified = TzDateTimeProperty(auto_now=True, verbose_name=_("date modified")) 

我想要得到的5条最近的消息记录,我知道,与谷歌应用程序引擎数据库的查询集我可以通过以下简单的方法获取最近的5个记录:

results = News.all().filter(panel = panel).order('created').fetch(5) 

使用Django在谷歌App Engine上运行,我需要做的事:

results = News.objects.filter(panel = panel).order_by('created')[:5] 

但它会抛出异常,如果没有消息记录。我可以将它封装在catch异常中,但是在Django中限制查询结果的适当和优化方法是什么?

回答

1

你可以做这样的事情

results = News.objects.filter(panel = panel).order_by('created') 
if results is not None: 
    new_results = results[:5] 
+0

这将高效?它看起来会得到所有结果,然后切片5? – Andriusa 2011-05-24 08:45:03

+0

给order_by – 2011-05-24 08:51:27

+0

添加限制那么,在1.2 Django中没有这样的方法来限制,也许我错了?在文档中说,为了限制我应该使用切片: http://docs.djangoproject.com/en/1.2/topics/db/queries/#limiting-querysets – Andriusa 2011-05-24 12:23:21