【发布时间】:2016-11-03 10:16:23
【问题描述】:
我正在尝试优化以下 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(id=msg.test_id)
if c not in arr:
arr.append(c)
return render(request, "test.html", {'context': arr})
所以我有两个模型。
- 我的模特
- 测试模型
目标:
- 仅从
MyModel中获取名为test_id的列上的唯一值,该列由id的MyModel排序。 - 只需要来自
MyModel的两个参数。他们是test_id和created_at
目前我可以看到以下改进方法。
- 使用过滤器查询中的值仅获取 test_id 和 created_at。
- 在 Django 中使用 mysql Distinct 关键字对 test_id 进行唯一搜索
- 不必要地循环遍历数据查询集。
- 再次在 arr 中搜索集合似乎真的没有必要且耗时。
我对 Django 比较陌生。因此,对于我应该如何继续或我应该阅读的任何链接的任何帮助将不胜感激。
【问题讨论】:
-
你应该总结一下你的视图在做什么。例如,我不明白您为什么在循环中设置
c.user_name和c.last_time,尤其是当您不保存任何内容时。 -
什么是
collection?你的代码中只是c吗? -
请展示您的模型。你的意思是写
TestModel.objects.get(test_id=msg.test_id)?像msgs和TestModel这样混合真实和虚构的变量名会让你的问题变得混乱。 -
您需要获取哪些 id/created_at 值 - 来自 MyModel 或 TestModel?