django中的order_by()shice querySet

发布于 2025-02-09 12:52:15 字数 715 浏览 1 评论 0原文

我有order_by()模型django,并获得了QuerySet以下结果:

queryset = <QuerySet [<MyModel: MyModel object (4)>, <MyModel: MyModel object (2)>, 
<MyModel: MyModel object (1)>, <MyModel: MyModel object (3)>, <MyModel: MyModel object (5)>]>

结果未按ID进行排序。

而且我想要具有myModelID大于1的slice QuerySet,以获取以下结果:

new_queryset = <QuerySet [<MyModel: MyModel object (4)>, <MyModel: MyModel object (2)>]>

是否有任何方法可以在没有这样的循环的情况下切片以减少查询?

for index in range(len(queryset)):
    if queryset[index].id == 1:
        new_queryset = queryset[:index]
        break

I have order_by() model django and got queryset following result:

queryset = <QuerySet [<MyModel: MyModel object (4)>, <MyModel: MyModel object (2)>, 
<MyModel: MyModel object (1)>, <MyModel: MyModel object (3)>, <MyModel: MyModel object (5)>]>

The result is not sorted by id.

And I want slice queryset that have order MyModel with id greater than 1 to get the following results:

new_queryset = <QuerySet [<MyModel: MyModel object (4)>, <MyModel: MyModel object (2)>]>

Is there any way to slice without loop like this to reduce the query ?

for index in range(len(queryset)):
    if queryset[index].id == 1:
        new_queryset = queryset[:index]
        break

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

云胡 2025-02-16 12:52:15

假设您是基于Publish_dateTime修改的订购QuerySet,则可以简单地使用所需ID的记录,然后根据与对象相关的订购,过滤QuerySet,像这样:

from django.db.models import F, Q

reference_object = MyModel.objects.get(id=1)
queryset = MyModel.objects.filter(
    Q(publish_datetime__lt=reference_object.publish_datetime) |
    Q(
        Q(publish_datetime=reference_object.publish_datetime) &
        Q(modified__gt=reference_object.modified)
    )
)

您将获得结果,即在所需的对象之前发布帖子,或者有相同的时间,但最新修改的日期

Assuming that you are ordering the queryset based on publish_datetime and modified, you can simply get the record with needed id, and filter the queryset according to the ordering relevant to the object, like this:

from django.db.models import F, Q

reference_object = MyModel.objects.get(id=1)
queryset = MyModel.objects.filter(
    Q(publish_datetime__lt=reference_object.publish_datetime) |
    Q(
        Q(publish_datetime=reference_object.publish_datetime) &
        Q(modified__gt=reference_object.modified)
    )
)

You will get the results where posts were published before the needed object, or with the same published time, but with more recent modified date

望喜 2025-02-16 12:52:15

您可以使用过滤器排除 querySetManager提供的功能。基本上,您可以执行以下操作:

new_queryset = MyModel.objects.filter(id__gt=1)

You can make use of filter or exclude functions that the QuerySetManager provides. Basically you can do the following:

new_queryset = MyModel.objects.filter(id__gt=1)
短暂陪伴 2025-02-16 12:52:15

您可以将列表结果切成如下所示:

new_queryset = MyModel.objects.filter(id__gt=1)[:5]

5表示只有5个记录将根据您的过滤QuerySet显示。

You can slice the list result as shown below:

new_queryset = MyModel.objects.filter(id__gt=1)[:5]

The 5 means the only 5 records would be displayed according to your filtered queryset.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文