Как отфильтровать первые 4 объекта модели

Я хочу получить первые 4 объекта Blog, связанные с моделью Blog Model.

Я попробовал следующее:

#views
blog_list = blog.objects.all().order_by("id")[:4]

Это работает, пока я не создам более 4 объектов блога, и тогда результат не включает недавно созданные объекты, а застревает на первых 4 объектах.

Вы всегда получаете первые четыре, поскольку вы получаете Blog элементы с наименьшим первичным ключом, которые будут (приблизительно) самыми "старыми" четырьмя.

Вы можете заказать в понижающем порядке с:

blog_list = blog.objects.order_by('-id')[:4]

Первичный ключ, однако, не полностью гарантирует, что именно в таком порядке создаются объекты, и поэтому является не безопасным способом сделать это.

Вы также можете работать со "случайным порядком", хотя это часто требует больших вычислительных затрат:

blog_list = blog.objects.order_by('?')[:4]

или использовать тот, который определяется опцией ordering [Django-doc], или, если такой опции нет, порядком, который использует база данных (который может быть любой порядок):

blog_list = blog.objects.all()[:4]

Примечание: Модели в Django пишутся в PascalCase, а не snake_case, поэтому вы можете переименовать модель из blog в Blog.

дублирование запроса django получает последние n записей

попробуйте изменить порядок_by, чтобы получить последние X записи

blog_list = blog.objects.all().order_by("-id")[:4]

если blog является классом, имя должно быть Blog в соответствии с конвенциями pep-8. https://peps.python.org/pep-0008/

Вернуться на верх