如何在Django ListView中实现基于用户输入的动态过滤?

hgtggwj0  于 2023-04-13  发布在  Go
关注(0)|答案(1)|浏览(121)

我正在做一个Django项目,我需要显示一个项目列表,并允许用户根据各种条件过滤项目。我使用Django的通用ListView来显示项目,但我不确定如何根据用户的输入实现动态过滤。
以下是我当前的设置:模型

class Item(models.Model):
    name = models.CharField(max_length=100)
    category = models.CharField(max_length=50, choices=CATEGORY_CHOICES)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    available = models.BooleanField(default=True)

观点:

class ItemListView(ListView):
    model = Item
    template_name = "items/item_list.html"

item_list.html

{% for item in object_list %}
    <div class="item">
        <h2>{{ item.name }}</h2>
        <p>Category: {{ item.category }}</p>
        <p>Price: {{ item.price }}</p>
    </div>
{% endfor %}

我想允许用户按类别,价格范围和可用性过滤项目。在Django ListView中实现此功能的最佳方法是什么?任何指导或示例都将不胜感激!

tkclm6bt

tkclm6bt1#

你可以在html模板的标签中使用查询参数。
例如,执行以下操作:

<a href="{% url 'ItemList' %}?category=books"></a>

然后,在视图中,您可以使用get_queryset()get_context_data()来过滤项目。类似于以下内容:

class ItemListView(ListView):
    model = Item
    template_name = "items/item_list.html"
       
    def get_context_data(self, **kwargs):
        category_parameter = self.request.GET.get("category")
        items = Item.objects.filter(category=category_parameter)
        return {'Items': items}

相关问题