2011-06-10 42 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中本地不受支持。结果恢复后,您可能必须自己对其进行排序。