改进Django查询

时间:2016-11-03 10:16:23

标签: python mysql sql django

我正在尝试优化以下Django视图。

test_id

所以我有两个模特。

  • 为MyModel
  • TestModel

目标:

  • 仅从MyModel id订购MyModel的{​​{1}}列中获取唯一值。
  • 只需要MyModel中的两个参数。它们是test_idcreated_at

目前我可以看到以下改进方法。

  • 使用过滤器查询中的值仅获取test_id和created_at。
  • 使用Django中的mysql Distinct关键字唯一地搜索test_id
  • 不必要地循环遍历数据查询集。
  • 再次在arr中搜索集合似乎真的不必要且耗时。

我对Django比较新。所以对我应该如何进行的任何帮助或我应该阅读的任何链接都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议修改你的观点如下:

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_list将允许节省内存,因为除了test_id之外你不使用任何东西。