Как отфильтровать первые 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/