You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于外键关联模型属性对Django的Booking模型对象排序?

Django中基于关联字段对Booking模型排序的实现方法

要实现基于关联模型字段对Booking对象排序,Django的QuerySet支持通过双下划线__跨关联模型访问字段,具体实现如下:

1. 基于TimeSlot的available_from字段排序

直接在order_by()方法中使用关联字段路径timeslot__available_from:

# 正序排序(按可用开始时间从早到晚)
bookings = Booking.objects.all().order_by('timeslot__available_from')

# 倒序排序(按可用开始时间从晚到早)
bookings = Booking.objects.all().order_by('-timeslot__available_from')

如果希望Booking模型默认按该字段排序,可修改模型的Meta类:

class Booking(models.Model):
    customer = models.ForeignKey(User, on_delete=models.CASCADE)
    check_in_date = models.DateField()
    timeslot = models.ForeignKey(TimeSlot, on_delete=models.CASCADE)

    class Meta:
        ordering = ['timeslot__available_from']  # 默认正序
        # 若需默认倒序,改为:ordering = ['-timeslot__available_from']

2. 基于Room的number字段排序

Booking与Room通过TimeSlot间接关联,需使用完整的关联路径timeslot__room__number:

# 正序排序(按房间号从小到大)
bookings = Booking.objects.all().order_by('timeslot__room__number')

# 倒序排序(按房间号从大到小)
bookings = Booking.objects.all().order_by('-timeslot__room__number')

设置默认排序的话,同样修改Booking的Meta类:

class Booking(models.Model):
    # 原有字段定义...
    class Meta:
        ordering = ['timeslot__room__number']  # 默认按房间号正序

多字段组合排序

如果需要同时按多个关联字段排序(比如先按房间号,再按时间段),只需在order_by()中依次列出字段路径:

bookings = Booking.objects.all().order_by('timeslot__room__number', 'timeslot__available_from')

内容的提问来源于stack exchange,提问作者Anshul Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:17:41