【发布时间】:2021-12-24 01:18:28
【问题描述】:
信息
我有两个模型:
class BookingModel(models.Model):
[..fields..]
class BookingComponentModel(models.Model):
STATUS_CHOICES = ['In Progress','Completed','Not Started','Incomplete','Filled','Partially Filled','Cancelled']
STATUS_CHOICES = [(choice,choice) for choice in STATUS_CHOICES]
COMPONENT_CHOICES = ['Test','Soak']
COMPONENT_CHOICES = [(choice,choice) for choice in COMPONENT_CHOICES]
booking = models.ForeignKey(BookingModel, on_delete=models.CASCADE, null=True, blank=True)
component_type = models.CharField(max_length=20, choices=COMPONENT_CHOICES)
status = models.CharField(max_length=50, choices=STATUS_CHOICES, default='Not Started')
order = models.IntegerField(unique=True)
[..fields..]
我想要什么
我想获取每个预订的预订组件,它按顺序具有最后一个值 (maximum)。它还需要有status='In Progress' 和component_type='Soak'。
例如表格:
+----+------------+----------------+-------------+-------+
| id | booking_id | component_type | status | order |
+----+------------+----------------+-------------+-------+
| 1 | 1 | Test | Completed | 1 |
+----+------------+----------------+-------------+-------+
| 2 | 1 | Soak | Completed | 2 |
+----+------------+----------------+-------------+-------+
| 3 | 1 | Soak | In Progress | 3 |
+----+------------+----------------+-------------+-------+
| 4 | 2 | Test | Completed | 1 |
+----+------------+----------------+-------------+-------+
| 5 | 2 | Soak | In Progress | 2 |
+----+------------+----------------+-------------+-------+
| 6 | 3 | Test | In Progress | 1 |
+----+------------+----------------+-------------+-------+
预期结果将是 id:4 & 6
我的尝试
我尝试了以下方法:
BookingComponentModel.objects.values('booking').annotate(max_order=Max('order')).order_by('-booking')
这不包括过滤,但返回每个预订的 max_order。
我需要具有 max_order 的组件的 ID,以便将其放入子查询中并让我能够过滤其他条件 (status, component_type)
谢谢
【问题讨论】:
标签: python mysql django django-models