gpt4 book ai didi

python - 通过某个 "type"(属性)的最新记录提高QuerySet过滤器的效率

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:28 25 4
gpt4 key购买 nike

我会尽量保持简洁。我有以下疑问:

organisation_survey_results = OrganisationSurveyResult.objects.filter(
user=user
).order_by('survey', 'created_date')

这也会产生类似的结果:

organisation_survey_results = OrganisationSurveyResult.objects.filter(
user=user
).order_by(
'survey__id',
'-created_date',
).distinct('survey__id',)

在上面,我根据用户匹配进行过滤。一切都很好。我已返回该用户的 5 条记录。

现在,如前所述,每条记录都带有以下属性属性“(链?)”:

独特的slug属性:

organisation_survey_result.organisation_survey.survey.slug

不可变(不可更改,创建时写入一次)created_date 属性:

organisation_survey_result.created_date

对于五个记录,如果我循环它们,我有:

django_1    | food
django_1 | 2019-08-12 15:45:49.384071+00:00
django_1 | drink
django_1 | 2019-08-12 15:45:49.390939+00:00
django_1 | politics
django_1 | 2019-08-12 15:45:49.397714+00:00
django_1 | money
django_1 | 2019-08-12 15:45:49.406612+00:00
django_1 | food
django_1 | 2019-08-13 11:26:55.831903+00:00

如您所见,我有两条记录,其中带有 food 的属性 organization_survey.survey.slug 出现了两次。 对于给定用户来说,这很好。 记录可以并且将会取代其他时间。

<小时/>

我的问题:

有没有办法可以在查询中过滤掉这些记录? (为了提高性能效率)...我希望能够在 QuerySet 级别上执行此操作,以减轻压力的序列化数据。

<小时/>

版本:

`Django==2.2.1`
`djangorestframework==3.9.3`

数据库引擎:

`PostgreSQL`

最佳答案

所以,对我来说,虽然不在一个查询集中,但输出是一个应该“可序列化”的查询集:

通过当前用户进行过滤,让我们的查询集抢占先机:

organisation_survey_results = OrganisationSurveyResult.objects.filter(user=user)

获取每个“organization_survey”类型的latest_records

latest_records = organisation_survey_results.values(
'user', 'organisation_survey'
).annotate(
latest_created_date=Max('created_date')
)

返回到初始查询集,按从 中获取的 latest_records“中”(created_date__in) 的 created_date 进行过滤latest_created_date 记录。

organisation_survey_results = organisation_survey_results.filter(
created_date__in=latest_records.values('latest_created_date')
).order_by(
'-created_date'
)

准确地给出了我在上述解决方案中所描述的所需内容。

关于python - 通过某个 "type"(属性)的最新记录提高QuerySet过滤器的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57478600/

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