gpt4 book ai didi

python - 如何限制 django lamba 查询中的响应大小

转载 作者:行者123 更新时间:2023-12-04 07:31:28 27 4
gpt4 key购买 nike

我知道在 Django 中限制查询的典型方法是将 [:10] 附加到查询的末尾,但我有一个使用 functools.reduce(lambda 的函数。我不确定如何限制查询大小。就目前而言,查询花费的时间太长并且获取的数据太多。限制此查询并提高效率的最佳方法是什么?
这是函数:

    def get_threads_for_student_mentor(cls, student_id=None, mentor_id=None):
clauses = []
if student_id:
clauses.append(models.Q(student_id=student_id))
if mentor_id:
clauses.append(models.Q(mentor_id=mentor_id))
if len(clauses) == 0:
raise ValueError("student_id and mentor_id cannot both be None")

return cls.objects.filter(functools.reduce(lambda a, b: a & b, clauses))
我尝试将 return 语句更改为 return cls.objects.filter(functools.reduce(lambda a, b: a & b, clauses))[:5].all() 我还尝试将它添加到附加函数中,如 clauses.append(models.Q(student_id=student_id)[:5])但唉,到目前为止还没有任何效果。我在这里做错了什么?我敢肯定这只是一个愚蠢的错误。

最佳答案

过滤的构建方式对限制结果数量没有影响。您可以与:

return cls.objects.filter(functools.reduce(lambda a, b: a & b, clauses))[:5]
您还可以通过以下方式简化过滤:
def get_threads_for_student_mentor(cls, student_id=None, mentor_id=None):
clauses = {}
if student_id:
clauses['student_id'] = student_id
if mentor_id:
clauses['mentor_id'] = mentor_id
if not clauses:
raise ValueError('student_id and mentor_id cannot both be None')

return cls.objects.filter(**clauses)[:5]
cls应该是对类的引用,而不是该类的对象。

关于python - 如何限制 django lamba 查询中的响应大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67909483/

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