【问题标题】:sorting search results in django在 django 中对搜索结果进行排序
【发布时间】:2021-08-19 14:51:12
【问题描述】:

我有一个具有以下型号的 django 应用程序。

class Posts(models.Model):
    post =  models.TextField(max_length=1500)
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    likes = models.ManyToManyField(User, related_name="post_likes")
    category = models.CharField(max_length=50, default=None)

为了允许用户搜索特定博客然后显示这些对象,我有以下视图。

def index(request):
    if request.method == "GET":
        search = request.GET.get("input")
        posts = Posts.objects.filter(category__icontains=f"{search}")
    else:
        posts = Posts.objects.all()
    params = {'blog': posts} 
    return render(request, 'index.html', params)

在上面的视图中,变量search 包含用户搜索的内容,我通过表单接收到的内容。 但我还想在用户搜索博客后提供排序功能。就像用户搜索"recipes" 一样,我需要向他们展示所有搜索结果,然后让他根据likesrecent 等对它们进行排序。我该怎么做,因为我在显示之后就丢失了搜索词结果。

【问题讨论】:

    标签: python-3.x django django-models django-views django-templates


    【解决方案1】:

    我假设排序选项也是搜索表单的一部分,因此您也可以将选择的排序选项作为查询参数发送到后端,就像您对搜索词所做的那样:

    sort = request.GET.get('sort')
    # use the sort options to order your queryset as you desire
    

    【讨论】:

    • 排序选项不是搜索表单的一部分,我希望用户能够在将它们显示到屏幕上后对其进行排序。
    • 我不认为表单中的排序选项会阻止您这样做,如果用户不选择,您可以选择最初选择的默认排序选项将其发送到后端改变它。如果这对您不起作用,您可以将搜索词放在上下文中,就像您对帖子所做的那样,这样您就可以在模板中访问它。另一种选择是在TEMPLATES 设置中启用django.template.context_processors.request 选项,这样您就可以访问模板中的请求对象,以便从那里获取搜索词。
    猜你喜欢
    • 2013-04-28
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多