Django ORM - 如何构建以下查询?

时间:2014-08-15 15:38:26

标签: django django-models django-queryset

models.py

class Box(models.Model):
    length  = models.IntegerField(null=False)
    width   = models.IntegerField(null=False)
    height  = models.IntegerField(null=False)

class BoxColorHistory(models.Model):
    box            = models.ForeignKey(Box, related_name='color_history')
    start_datetime = models.DateTimeField(null=False)
    end_datetime   = models.DateTimeField(null=True)
    color          = models.CharField(max_length=20)

我想编写一个返回所有当前color ='green'的Box的查询。

问题是颜色在不断变化。每次颜色改变时,都会记录在BoxColorHistory表中。

框的当前颜色是BoxColorHistory表中的行,其中最近的开始时间和结束时间为空。

2 个答案:

答案 0 :(得分:1)

current_green_histories = BoxColorHistory.objects.filter(
    end_datetime__isnull=True,
    color='green'
)
Box.objects.filter(color_history__id__in=current_green_histories.values('id'))

答案 1 :(得分:0)

尝试:

Box.objects.filter(color_history__color='green')