问题描述
我的Django项目中有一些应用程序具有不同的模型,搜索将在每个表中查找结果。
例如:
# views.py
def search(request):
queryset_list_ip_sensor = Ip_sensor.objects.all()
queryset_list = ControlValves.objects.all()
queryset_list_water_quality_sensor = Water_quality_sensor.objects.all()
context = {
'ip_sensors': result_list_ip_sensor,'controlvalves': result_list_control_valves_2,'water_quality_sensor': result_list_water_quality_sensor,'values': request.GET,'keywords': keywords
}
return render(request,'pages/search.html',context)
我这样实现分页:
# views.py
def search(request):
# ...
result = (result_list_ip_sensor,result_list_control_valves,result_list_water_quality_sensor)
paginator = Paginator(result,1)
page = request.GET.get('page')
paged_queries = paginator.get_page(page)
context_pagination = {'ip_sensors': result_list_ip_sensor,'queries': paged_queries,'keywords': keywords,'values': request.GET
}
return render(request,context_pagination)
-
{% if ip_sensors %} {% for ip_sensor in ip_sensors %} <div class="col-12 col-sm-12 col-md-4 col-lg-4 col-xl-4 mb-4"> <div class="card"> <div class="card-header"> I/P Sensor </div> <img class="card-img-top" src="{{ ip_sensor.cover.url }}" alt=""> <div class="card-body"> <div class="text-center"> <h4 class="text-dark">{{ ip_sensor.title }}</h4> <p> {{ ip_sensor.description | truncatewords:10 }}</p> </div> <hr> <div class="row py-2 text-dark"> <div class="col-6"> Product Name: {{ ip_sensor.product_name | truncatewords:2 }}</div> <div class="col-6"> Usage: {{ ip_sensor.usage | truncatewords:4}}</div> </div> <hr> <a href="{% url 'ip_sensor_item' ip_sensor.title %}" class="btn btn-light btn-block">More Info</a> </div> </div> </div> {% endfor %} {% endif %} {% if controlvalves %} {% for controlvalve in controlvalves %} <div class="col-12 col-sm-12 col-md-4 col-lg-4 col-xl-4 mb-4"> <div class="card"> <div class="card-header"> Control Valves </div> <img class="card-img-top" src="{{ controlvalve.cover.url }}" alt=""> <div class="card-body"> <div class="text-center"> <h4 class="text-dark">{{ controlvalve.title }}</h4> <p> {{ controlvalve.description | truncatewords:10 }}</p> </div> <hr> <div class="row py-2 text-dark"> <div class="col-6"> Product Name: {{ controlvalve.product_name | truncatewords:2 }}</div> <div class="col-6"> Usage: {{ controlvalve.usage | truncatewords:4}}</div> </div> <hr> <a href="{% url 'valve' controlvalve.title %}" class="btn btn-light btn-block">More Info</a> </div> </div> </div> {% endfor %} {% endif %} {% if water_quality_sensor %} {% for w_q_sensor in water_quality_sensor %} <div class="col-12 col-sm-12 col-md-4 col-lg-4 col-xl-4 mb-4"> <div class="card"> <div class="card-header"> Water Quality Sensor<br> </div> <img class="card-img-top" src="{{ w_q_sensor.cover.url }}" alt=""> <div class="card-body"> <div class="text-center"> <h4 class="text-dark">{{ w_q_sensor.title }}</h4> <p> {{ w_q_sensor.description | truncatewords:10 }}</p> </div> <hr> <div class="row py-2 text-dark"> <div class="col-6"> Product Name: {{ w_q_sensor.product_name | truncatewords:2 }}</div> <div class="col-6"> Usage: {{ w_q_sensor.usage | truncatewords:4}}</div> </div> <hr> <a href="{% url 'water_sensor_item' w_q_sensor.title %}" class="btn btn-light btn-block">More Info</a> </div> </div> </div> {% endfor %} {% endif %}
-
搜索结果可能包含任何表(模型)中的项目。
解决方法
Paginator期望从一个模型仅获取一个查询集。 您有3个结果集,因此您将需要3个分页。
您能否将此视图分为3个不同的视图?
如果您的要求不允许这样做,请考虑使用js对同一html模板中的3个不同数据集进行分页。我将使用前端框架从django后端获取json,并独立显示页面的3个区域。