2011-06-10 68 views
2

有沒有一種方法可以在django-nonrel中使用'order_by'在外鍵上返回數據庫中的項目?Django-nonrel按foreignkey排序

全部細節如下:

 
#Models.py 
class Post(models.Model): 
    article = models.TextField(help_text='Paste or type HTML in here') 
    pub_date = models.DateField() 
    .... 

class TagItems(models.Model): 
    title = models.CharField(max_length=200) 
    .... 

class TagRel(models.Model): 
    the_post = models.ForeignKey('Post') 
    the_tag = models.ForeignKey('Tag') 

TagRel定義郵政和TagItems類之間的多對多關係。

我想獲取每個標籤的文章列表。

 
#Desire output 
My tag 
-my first post 
-my second post 

My second tag 
- my other post 
- another post 

所有的已經很不錯了,因爲我使用以下方法來過濾數據:

 
def tagged_posts(): 
    tag_items = TagItems.objects.all() 
    li =[] 
    for item in tag_items: 
     tag_rel_item = TagRel.objects.filter(the_tag__pk = item.pk) 
     li.append(tag_rel_item) 
    return {'list_of_objects': li} 

我使用DB-索引來定義db-indexes.py查詢的過濾器部分。所有這些工作正常,但我想按發佈日期排序。

Django文檔告訴我用:

 
TagRel.objects.filter(the_tag__pk = item.pk).order_by('the_tag__pub_date') 

但ORDER_BY( 'the_tag__pub_date')的部分不會出現由Django的nonrel支持。

下也適用於普通的Django:

 
TagRel.objects.filter(the_tag__pk = item.pk).order_by('the_post') 

這工作,因爲該帖子已經按日期模型中的排序。

但是這在django-nonrel中也不起作用。

所以我的問題是如何返回按日期排序的帖子(最新>最舊)?

在此先感謝

+0

我也有同樣的問題。解決方法是用信息創建一個文本字段,但我想避免這種情況。 – Lionel 2011-08-04 20:52:32

回答

0

我在猜測 - 你正在使用ManyToManyField。我相信這是在App Engine的數據存儲上使用ListProperty實現的。

看到標記爲數據存儲文檔中的部分「屬性具有多個值會有意想不到的行爲」: http://code.google.com/appengine/docs/python/datastore/queries.html

這就是爲什麼結果會顯示未排序是最有可能。 ManyToMany關係在GAE中本地不受支持。結果恢復後,您可能必須自己對其進行排序。