[英]Improving the Django Query
我正在嘗試優化以下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})
所以我有兩個型號。
test_id
MyModel
的id
按MyModel
排序的名為test_id
的列上獲取唯一值。 MyModel
兩個參數。 它們是test_id
和created_at
目前我可以看到以下改進方法。
我對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查詢上使用values_list可以節省內存,因為除了test_id之外你不使用任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.