建筑类型的一般理论问题
我有网站页面,其中包含 Tabs
的集合。在某些数据表的每个 Tab
问题中。
实际上,所有这些数据表 - 都是 MySQL 数据库中某个 QuerySet 的不同 filter
。
(此查询中的最大行数:约 5000-10000 行,包含 5-8 个字符 (45)/整数字段。)
怎么做才能更快、更正确:
1.我对 DBMS 服务器使用了一个 sql 请求:
```Python
def Page(request):
....
GeneralQuery = MyTable.objects().all()
# After make all needed filter for `GeneralQuery` QuerySet in memory, without any reconnect to
# Django.Models (DBMS MySQL in fact)
tab1_qry = GeneralQuery.filter(field1__in=[filter_list1])
tab2_qry = GeneralQuery.filter(field2__in=[filter_list2])
tab2_qry = GeneralQuery.filter(field3__in=[filter_list3])
exit_tabs = {
'tab1_data`: tab1_qry,
'tab2_data`': tab2_qry,
'tab3_data`': tab3_qry,
}
return(request, template_name="data_tabs.html", context=exit_tabs)
所以 - 所有需要的数据 - 在网络服务器内存中。模板 - 仅在一页上的 Tab1、Tab2、Tab3 之间切换并发出 tabX_data
2.我为 tabX_data
放置了任何 TabX
,例如从 request.GET
中获取 Tab_name(或其他一些方法 - 我想这不是问题):
```Python
def Page(request):
GeneralQuery = MyTable.objects().all()
# After make all needed filter from `GeneralQuery` QuerySet in memory,
#but get own `render` function for each `Tab`.
if (not request.GET) or (request.GET[`tab1`] == `yes`): #By default `tab1`
return tab1(request, GeneralQuery)
elif request.GET[`tab2`] == `yes`:
return tab2(request, GeneralQuery)
elif request.GET[`tab3`] == `yes`:
return tab3(request, GeneralQuery)
def tab1(request, GeneralQuery):
exit_tab = {
'TabX': 'tab1' # For Activate `Tab1` on page
'tab_data': GeneralQuery.filter(field1__in=[filter_list1])
}
return render(request, template_name="data_tabs.html", context=exit_tab)
def tab2(request, GeneralQuery):
exit_tab = {
'TabX': 'tab2' # For Activate `Tab2` on page
'tab_data': GeneralQuery.filter(field2__in=[filter_list2])
}
return render(request, template_name="data_tabs.html", context=exit_tab)
```
3.与第 2 页类似,但针对每个问题自行查询数据库:
```Python
def Page(request):
if (not request.GET) or (request.GET[`tab1`] == `yes`): #By default `tab1`
return tab1(request)
elif request.GET[`tab2`] == `yes`:
return tab2(request)
elif request.GET[`tab3`] == `yes`:
return tab3(request)
def tab1(request, GeneralQuery):
tab_data = MyTable.objects.filter(field1__in=[filter_list1])
exit_tab = {
'TabX': 'tab1' # For Activate `Tab1` on page
'tab_data': tab_data
}
return render(request, template_name="data_tabs.html", context=exit_tab)
def tab2(request, GeneralQuery):
tab_data = MyTable.objects.filter(field2__in=[filter_list2])
exit_tab = {
'TabX': 'tab2' # For Activate `Tab2` on page
'tab_data': tab_data
}
return render(request, template_name="data_tabs.html", context=exit_tab)
```