基于FK属性的复杂django db排序(Complex django db ordering based on FK properties)

编程入门 行业动态 更新时间:2024-10-12 16:22:08
基于FK属性的复杂django db排序(Complex django db ordering based on FK properties)

我有以下两种型号:

class OrderItem(models.Model): order = models.ForeignKey(Order, related_name='items') title = models.ForeignKey(Title, related_name='order_items') class OrderNotes(models.Model): order_item = models.ForeignKey('OrderItem', blank=True, null=True) timestamp = models.DateTimeField(auto_now_add=True) is_active = models.BooleanField(default=True)

如何通过最新的OrderNote对OrderItem进行排序?

在伪代码中:

OrderItem.objects.order_by('ordernotes_set.order_by('is_active', '-timestamp'))

I have the following two models:

class OrderItem(models.Model): order = models.ForeignKey(Order, related_name='items') title = models.ForeignKey(Title, related_name='order_items') class OrderNotes(models.Model): order_item = models.ForeignKey('OrderItem', blank=True, null=True) timestamp = models.DateTimeField(auto_now_add=True) is_active = models.BooleanField(default=True)

How would I sort OrderItems by the most recent OrderNote that is active?

In pseudo_code:

OrderItem.objects.order_by('ordernotes_set.order_by('is_active', '-timestamp'))

?

最满意答案

我认为你可以使用注释来相当容易地处理这个问题。 https://docs.djangoproject.com/en/dev/topics/db/aggregation/#following-relationships-backwards

from django.db.models import Max OrderItems.annotate(newest_note_time=Max('ordernotes__timestamp')) .order_by('-ordernotes__is_active', '-newest_note_time')

I think you could use annotations to handle this fairly easily. https://docs.djangoproject.com/en/dev/topics/db/aggregation/#following-relationships-backwards

from django.db.models import Max OrderItems.annotate(newest_note_time=Max('ordernotes__timestamp')) .order_by('-ordernotes__is_active', '-newest_note_time')

更多推荐

本文发布于:2023-08-07 18:06:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465351.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:属性   db   django   FK   based

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!