【问题标题】:Django ORM - how can I build the following query?Django ORM - 如何构建以下查询?
【发布时间】:2014-10-09 08:51:40
【问题描述】:

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)

我想编写一个查询,返回所有当前颜色='green'的框。

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

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

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案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'))
    

    【讨论】:

    • 谢谢。不过,我是个新手,很困惑——color_history 来自哪里? Box 只有长度、宽度、高度字段。
    【解决方案2】:

    试试:

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

    【讨论】:

    • 每个盒子在某个时候都是绿色的。我只想要那些现在是绿色的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2020-12-03
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多