Python 改进Django查询
我试图优化以下Django视图Python 改进Django查询,python,mysql,sql,django,Python,Mysql,Sql,Django,我试图优化以下Django视图 def test_view(request, username): msgs = MyModel.objects.filter(name=username, created_at__range=[start_date, end_date]).order_by('-id') arr = [] for msg in msgs: c = TestModel.objects.get(i
def test_view(request, username):
msgs = MyModel.objects.filter(name=username,
created_at__range=[start_date, end_date]).order_by('-id')
arr = []
for msg in msgs:
c = TestModel.objects.get(id=msg.test_id)
if c not in arr:
arr.append(c)
return render(request, "test.html", {'context': arr})
所以我有两个模型
- 我的模型
- 测试模型
- 仅从由
的MyModel
排序的id
中获取名为MyModel
的列上的唯一值test\u id
- 只需要来自
的两个参数。它们是在MyModel
- 在筛选器查询中使用值仅获取测试\u id和在处创建的\u
- 在Django中使用mysql Distinct关键字在test_id上进行唯一搜索
- 通过数据查询集进行不必要的循环
- 同样,在arr中搜索集合似乎真的不必要而且耗时
我对Django比较陌生。因此,对于我应该如何继续或阅读任何链接的任何帮助,我将不胜感激。我建议修改您的观点,如下所示:
def test_view(request, username):
msgs = MyModel.objects.filter(
name=username, created_at__range=[start_date, end_date]
).order_by('-id').values_list('test_id', flat=True)
arr = TestModel.objects.filter(id__in=msgs)
return render(request, "test.html", {'context': arr})
这样就避免了在一个查询中获取所需的所有TestModel。另外,在MyModel查询中使用值列表可以节省内存,因为您只使用测试id,不使用任何东西。我建议您修改视图,如下所示:
def test_view(request, username):
msgs = MyModel.objects.filter(
name=username, created_at__range=[start_date, end_date]
).order_by('-id').values_list('test_id', flat=True)
arr = TestModel.objects.filter(id__in=msgs)
return render(request, "test.html", {'context': arr})
这样就避免了在一个查询中获取所需的所有TestModel。另外,在MyModel查询中使用values\u list可以节省内存,因为您只需使用test\u id即可。您应该总结视图所做的工作。例如,我不明白为什么要在循环中设置
c.user\u name
和c.last\u time
,尤其是在您没有保存任何内容的情况下。什么是collection
?您的代码中是否只有c
?请出示您的型号。你的意思是写TestModel.objects.get(test\u id=msg.test\u id)
?混合使用实名和合成变量名,如msgs
和TestModel
,会让您的问题变得混乱。您需要从MyModel或TestModel中获取哪些id/created_值?您应该总结一下您的视图所做的工作。例如,我不明白为什么要在循环中设置c.user\u name
和c.last\u time
,尤其是在您没有保存任何内容的情况下。什么是collection
?您的代码中是否只有c
?请出示您的型号。你的意思是写TestModel.objects.get(test\u id=msg.test\u id)
?混合使用实名和合成变量名,如msgs
和TestModel
,会让您的问题变得混乱。您需要从MyModel或TestModel获取哪些id/created\u值?