gpt4 book ai didi

Django ListView - 用于过滤和排序的表单

转载 作者:行者123 更新时间:2023-12-03 21:12:20 25 4
gpt4 key购买 nike

我的目标

  • 在表格中列出我所有更新(模型)的站点
  • 不要一次显示所有模型(分页 - 每页可能 10 个)
  • 对列表进行过滤和排序

  • 我的想法
  • 我可以使用 ListView 来获取我所有更新的集合
  • 使用 paginate_by = 10
  • 使用表单在我的 QuerySet 中设置 order_by 或过滤器

  • 我的问题

    我不确定如何添加表单来使用过滤器和排序修改我的 QuerySet。我的想法是使用额外的过滤器和 order_by 修改 get_queryset 中的查询。

    我的观点
    class MyView(ListView):
    model = Update
    template_name = "updates/update.html"
    paginate_by = 10

    def get_queryset(self):
    return Update.objects.filter(
    ~Q(state=Update.STATE_REJECTED),
    ~Q(state=Update.STATE_CANCELED),
    ~Q(state=Update.STATE_FINISHED),
    ).order_by(
    'planned_release_date'
    )

    我的想法

    像这样的东西。我知道它不是这样工作的......只是为了说明
    class MyView(ListView):
    model = Update
    template_name = "updates/update.html"
    paginate_by = 10

    def post(self, request, *args, **kwargs):
    new_context = Update.objects.filter(
    request.POST.get("filter"),
    ).order_by(
    request.POST.get("sorting"),
    )

    def get_queryset(self):
    return Update.objects.filter(
    ~Q(state=Update.STATE_REJECTED),
    ~Q(state=Update.STATE_CANCELED),
    ~Q(state=Update.STATE_FINISHED),
    ).order_by(
    'planned_release_date'
    )

    最佳答案

    你不需要发帖。在 url 中传递过滤器值和 order_by 例如:
    .../update/list/?filter=filter-val&orderby=order-val
    并在 get_queryset 中获取过滤器和 orderby,例如:

    class MyView(ListView):
    model = Update
    template_name = "updates/update.html"
    paginate_by = 10

    def get_queryset(self):
    filter_val = self.request.GET.get('filter', 'give-default-value')
    order = self.request.GET.get('orderby', 'give-default-value')
    new_context = Update.objects.filter(
    state=filter_val,
    ).order_by(order)
    return new_context

    def get_context_data(self, **kwargs):
    context = super(MyView, self).get_context_data(**kwargs)
    context['filter'] = self.request.GET.get('filter', 'give-default-value')
    context['orderby'] = self.request.GET.get('orderby', 'give-default-value')
    return context

    确保为 filter 和 orderby 提供适当的默认值

    示例表单(您可以根据需要对其进行修改):
    <form method="get" action="{% url 'update-list' %}">
    <p>Filter: <input type="text" value={{filter}} name="filter"/></p>
    <p>order_by: <input type="text" value={{orderby}} name="orderby"/></p>
    <p><input type="submit" name="submit" value="submit"/></p>
    </form>

    关于Django ListView - 用于过滤和排序的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33350362/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com