首页 > 解决方案 > 基于时间和外键值的 Django 查询模型

问题描述

我在查询 Django 对象方面需要帮助。我有 3 个模型:建筑、地图和报告。一个建筑物可以有许多地图。一张地图可以有很多报告。鉴于建筑物的名称,我想找到每个楼层的最新报告。也就是说,我想要一个报告列表,其中每个报告都有不同的楼层,每个报告都是该楼层的最新报告。

class Building(models.Model):
    building_id  =   models.AutoField('BID', auto_created=True, primary_key=True)
    name         =   models.CharField('Name', max_length=128)

class Map(models.Model):
    map_id       =   models.AutoField('MID', auto_created=True, primary_key=True)
    building_id  =   models.ForeignKey(Building, on_delete=models.CASCADE, default=1)
    floor        =   models.CharField('Floor Number', max_length=128)

class Report(models.Model):
    report_id    =   models.AutoField('RID', auto_created=True, primary_key=True)
    map_id       =   models.ForeignKey(Map, on_delete=models.CASCADE, default=1)
    building_id  =   models.ForeignKey(Building, on_delete=models.CASCADE, default=1)
    created_date =   models.DateTimeField(auto_now_add=True)

我在下面有一些伪代码,但必须有更简单的方法使用 Django 过滤器。有任何想法吗?

name = "Mall"

# All of the buildings reports
reports = Reports.filter(building_id__name= name)

floors_seen = []
latest_reports = []
for report in reports:

    floorNumber = report.map_id.floor_num

    if floorNumber not in floors_seen:
        floors_seen.append(floorNumber)
        latest_reports.append(report)

    else:
        for latest_report in latest_reports:
            if latest_report.map_id.floor_num == floorNumber:
                if report.created_date > latest_report.created_date:
                    latest_reports.remove(latest_report)
                    latest_reports.append(report)

标签: djangodjango-models

解决方案


推荐阅读