实现django列表筛选功能的代码攻略大致分为以下步骤:
- 创建筛选表单。
- 在视图函数中获取筛选条件并过滤数据。
- 在模板中展示筛选界面及数据。
下面,将分别详细阐述每个步骤。
- 创建筛选表单
首先,在应用的forms.py文件中创建一个筛选表单类。表单类的属性应与模型类中要筛选的字段名称相同,以便后续在视图函数中获取这些字段的值进行筛选。
以下是一个示例:
from django import forms
from .models import Student
class StudentFilterForm(forms.ModelForm):
class Meta:
model = Student
fields = ['name', 'gender', 'age']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control'}),
'gender': forms.Select(attrs={'class': 'form-control'}),
'age': forms.NumberInput(attrs={'class': 'form-control'})
}
在该示例中,我们从django.forms
模块中导入了forms
类,以及要筛选的模型类Student
。表单类StudentFilterForm
继承了ModelForm
,并指定了要使用的模型类和要筛选的字段。widgets
属性指定了渲染表单元素时所使用的HTML标签和CSS类名。
- 在视图函数中获取筛选条件并过滤数据
接下来,在视图函数中获取筛选表单的数据,并使用它们对模型数据进行筛选。
以下是一个示例:
from django.shortcuts import render
from .forms import StudentFilterForm
from .models import Student
def student_list(request):
form = StudentFilterForm(request.GET)
students = Student.objects.all()
if form.is_valid():
name = form.cleaned_data.get('name')
gender = form.cleaned_data.get('gender')
age = form.cleaned_data.get('age')
if name:
students = students.filter(name__contains=name)
if gender:
students = students.filter(gender=gender)
if age:
students = students.filter(age=age)
return render(request, 'student_list.html', {
'form': form,
'students': students
})
在该示例中,我们首先在视图函数中实例化了一个StudentFilterForm
表单,并将GET请求中的数据作为参数传递给它。然后,获取所有Student
实例,并在if form.is_valid()
语句中,使用cleaned_data
属性获取筛选条件。最后,分别使用filter()
方法根据不同条件过滤实例,以获得符合条件的数据集合。
- 在模板中展示筛选界面及数据
最后,在模板中展示筛选表单和过滤后的数据。
以下是一个示例:
{% extends 'base.html' %}
{% block content %}
<div class="row">
<div class="col-md-4">
<h1>Student List</h1>
<form method="get" action="{% url 'student_list' %}">
{{ form.as_p }}
<button type="submit" class="btn btn-primary">Filter</button>
</form>
</div>
<div class="col-md-8">
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Gender</th>
<th>Age</th>
</tr>
</thead>
<tbody>
{% for student in students %}
<tr>
<td>{{ student.name }}</td>
<td>{{ student.gender }}</td>
<td>{{ student.age }}</td>
</tr>
{% empty %}
<tr>
<td colspan="3">No students found.</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}
在该示例中,我们使用{{ form.as_p }}
语句将筛选表单的HTML代码渲染为一个p元素序列。并将students
变量作为模板上下文渲染到模板中。同时使用if
语句检测students
变量是否为空,如果为空则显示一条消息。最后,使用表格的方式展示数据。
综上所述,以上是django列表筛选功能的实现代码攻略。例如,我们可以通过制作一个学生列表并按照学生的名字、性别、年龄进行筛选来实现该功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django列表筛选功能的实现代码 - Python技术站