【问题标题】:Get 5 random instances from a queryset in Django从 Django 的查询集中获取 5 个随机实例
【发布时间】:2020-06-03 01:54:12
【问题描述】:

我有这个视图函数,可以在我的文章模型中呈现前 5 篇文章

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

如何编辑它以输出任何随机 5?

我尝试了this 解决方案,但没有奏效。我不知道我做错了什么。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • “但它不起作用”--请发布不起作用的代码,以便我们提供帮助。

标签: django django-views


【解决方案1】:

我更喜欢在每次页面加载时对整个查询集进行洗牌,并对模板中的前 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

在模板中,循环遍历五个随机对象:

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

【讨论】:

  • 感谢您的帮助,但我不知道如何将其应用于我的代码。
【解决方案2】:

这对我有用

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2018-12-04
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多