Джанго-нерель сортировка по иностранному ключу - PullRequest
2 голосов
/ 10 июня 2011

Есть ли способ вернуть элементы из базы данных в django-nonrel, используя order_by для чужой клавиши?

Полная информация выглядит следующим образом:

#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 определяет отношение ManytoMany между классами Post и 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-indexer для определения фильтрующей части запроса в 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.

Итак, мой вопрос, как мне вернуть мои сообщения, упорядоченные по дате (самая последняя> самая старая)?

Заранее спасибо

1 Ответ

0 голосов
/ 12 января 2012

Я догадываюсь об этом - вы используете ManyToManyField. Я считаю, что это реализовано с использованием ListProperty в хранилище данных App Engine.

См. Раздел документации по хранилищу данных с пометкой «Свойства с несколькими значениями могут иметь удивительное поведение»: http://code.google.com/appengine/docs/python/datastore/queries.html

Скорее всего, ваши результаты выглядят несортированными. Отношения ManyToMany изначально не поддерживаются в GAE. Вам, вероятно, придется отсортировать их самостоятельно после получения результатов.

...