Получить 5 случайных экземпляров из набора запросов в Django - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть эта функция просмотра, которая отображает первые 5 статей в моей модели статей

def home_page(request):
    qs = Article.objects.all()[:5]
    context = {'article_list': qs}
    return render(request, "home.html", context)

Как мне отредактировать ее для вывода случайных 5?

Я пробовал это решение, но оно не сработало. Я не знаю, что я делаю неправильно.

Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

это то, что у меня сработало

from random import sample

def home_page(request):
    id_list = Article.objects.all().values_list('id', flat=True)
    random_profiles_id_list = sample(list(id_list), 5)
    qs = Article.objects.filter(id__in=random_profiles_id_list)
    context = {'article_list': qs}
    return render(request, "home.html", context)
0 голосов
/ 19 февраля 2020

Я предпочитаю перетасовывать весь набор запросов при каждой загрузке страницы и нарезать первые 5 объектов в шаблоне. В представлениях:

ids = [i.id for i in Model.objects.filter(some_field=some_variable)] #list of the queryset's ids
random.shuffle(ids) # shuffle the ids
shuffled = [Model.objects.get(id=i) for i in ids] #map back the shuffled ids to corresponding objects

В шаблоне l oop через пять случайных объектов:

{% for i in shuffled|slice:'5' %}

...