2011-05-23 222 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