Python 如何在不添加更多查询的情况下重用django中的对象?

Python 如何在不添加更多查询的情况下重用django中的对象?,python,django,Python,Django,在下面的代码中,everyamount=u.filter(email\u icontains=email)django对我的过滤器执行另一个查询,我如何避免这些查询 u = User.objects.all() shares = Share.objects.all() for o in shares: email = o.email type = "CASH" amount = u.filter(email__icontains=email).count() 这

在下面的代码中,every
amount=u.filter(email\u icontains=email)
django对我的过滤器执行另一个查询,我如何避免这些查询

u = User.objects.all()  
shares = Share.objects.all()  
for o in shares:
    email = o.email
    type = "CASH"
    amount = u.filter(email__icontains=email).count()

这整段代码效率很低,更多的上下文可能会有所帮助

  • 您需要
    u=User.objects.all()
    做什么

  • 调用
    QuerySet.filter()
    会触发查询。通过调用
    filter()
    您只需为要获取的记录集指定一些条件。如果不是通过运行DB查询,您还应该如何获得与您的条件匹配的记录?如果您希望Django不运行DB查询,那么您可能不知道自己在做什么

  • 使用
    过滤器(email\uu icontains=email)
    进行过滤效率非常低-数据库无法使用任何索引,您的查询速度将非常慢。你不能用过滤(email=email)来代替它吗

  • 在循环中调用一组查询是次优的


所以再说一次,你要做的事情的一些上下文会很有帮助,因为有人可以为你的问题找到更好的解决方案。

这整段代码效率很低,多一些上下文可能会有所帮助

  • 您需要
    u=User.objects.all()
    做什么

  • 调用
    QuerySet.filter()
    会触发查询。通过调用
    filter()
    您只需为要获取的记录集指定一些条件。如果不是通过运行DB查询,您还应该如何获得与您的条件匹配的记录?如果您希望Django不运行DB查询,那么您可能不知道自己在做什么

  • 使用
    过滤器(email\uu icontains=email)
    进行过滤效率非常低-数据库无法使用任何索引,您的查询速度将非常慢。你不能用过滤(email=email)来代替它吗

  • 在循环中调用一组查询是次优的


所以再说一次-你想做什么的一些上下文会很有帮助,因为有人可以为你的问题找到更好的解决方案。

我不明白你为什么需要使用
u
,只需要使用
amount=User.objects.filter(email\uu icontains=email)
什么是
共享
?这是另一个问题吗?你能演示一下吗?我刚刚添加了共享,当django调用u.filter时,它不使用User.objects.all()中的对象,而是调用另一个查询,每次循环运行时查询的数量都会增加,请帮助我。我不明白你为什么需要使用
u
,只需使用
amount=User.objects.filter即可(email\uu icontains=email)
什么是
共享
?这是另一个查询吗?你能显示吗?我刚刚添加了共享,当django调用u.filter时,它不使用User.objects.all()中的对象,而是调用另一个查询,每次循环运行时,查询数量都会增加,请帮助