метка времени в Джанго - PullRequest
       19

метка времени в Джанго

2 голосов
/ 15 декабря 2010

Я пытаюсь выучить Джанго. Пока я полностью зеленый. Я учусь на не очень хорошей книге - сначала мы создаем простой блог. Итак, в конце этого упражнения они хотят, чтобы я отсортировал свой пост в блоге - так что новые посты находятся сверху. Для этого я добавляю:

class Meta:
    ordering = ('-timestamp',)

в views.py. К сожалению, это ничего не меняет - мои посты не двигаются. Книга не очень описывает это. Нужно ли где-то регистрировать этот класс? Я хочу, чтобы мой псевдоблог был pwetty! : P

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

Ответы [ 4 ]

1 голос
/ 15 декабря 2010

Есть несколько способов сделать это. Добавляя класс Meta, вы присваиваете объекту свойственный порядок. Использование менеджера для получения all() вернет вам похожую на список группу каждого объекта по порядку. Я не проверял это сам, но список, который вы получаете от filter(), тоже должен быть в порядке.

Теперь вы также можете заказать на момент запроса:

BlogEntry.objects.all().order_by('-timestamp')

отсортирует по убыванию отметки времени.

Обратите внимание, что оба они предполагают наличие в вашей модели поля с именем timestamp, которое содержит сортируемое поле (например, DateTimeField, возможно, в этом случае)

Если добавление Meta не изменило ваш порядок, я подозреваю, что вы сортируете по чему-то еще, где-то еще. Как насчет публикации запроса, который должен генерировать отсортированный список?

1 голос
/ 15 декабря 2010

Вы должны добавить Meta к своей модели (а не к views.py):

class Post(models.Model):
    title = models.CharField()
    timestamp = (...)

    class Meta:
        ordering = ['-timestamp']

Теперь, когда вы получаете ваши сообщения, они будут упорядочены по -timestamp.

Если вы хотите узнать больше о мета-опциях, взгляните на документацию .

1 голос
/ 15 декабря 2010

Вам нужно будет представить еще немного кода, например, как вы извлекаете данные из базы данных.Вот несколько примеров заказа:

http://www.djangoproject.com/documentation/models/ordering/

0 голосов
/ 15 декабря 2010

Без дополнительной информации, я считаю, что решение вашей проблемы заключается в том, что объявление class Meta должно быть в любой модели, представляющей запись в блоге (вероятно, в models.py, а не views.py). Также дважды проверьте, что timestamp - это имя поля в классе BlogEntry, в котором хранится дата / время записи в блоге.

class BlogEntry:
    class Meta:
        ordering = ('-timestamp',)

    #rest of the BlogEntry class
...