gpt4 book ai didi

python - 改进 Django 查询

转载 作者:行者123 更新时间:2023-11-30 22:10:01 24 4
gpt4 key购买 nike

我正在尝试优化以下 Django View 。

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})

所以我有两个模型。

  • 我的模型
  • 测试模型

目标:

  • 仅获取名为 test_id 的列中的唯一值来自 MyModelid 订购的 MyModel .
  • 只需要来自 MyModel 的两个参数.他们是 test_idcreated_at

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

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

我对 Django 比较陌生。因此,任何有关我应该如何进行的帮助或我应该阅读的任何链接都将不胜感激。

最佳答案

我建议按如下方式修改您的 View :

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 之外您什么都不用。

关于python - 改进 Django 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40398923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com