django - 基于时间和外键值的 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)
解决方案
推荐阅读
- amazon-web-services - AWS ECS - What factors should I consider when creating a new cluster or re-using an existing cluster and creating a new service
- version-control - 有没有办法用它们的内容(包括历史)展平/替换 mercurial subrepos
- java - java.lang.IllegalArgumentException:比较方法违反了它的一般约定,仅在特定的测试用例中
- python - 如何在 Alembic 迁移(Postgres)中使用现有的 sqlalchemy 枚举
- python-3.x - 从字典中的值创建一个新列表
- javascript - How to target non-unique, dynamically generated elements in the DOM with plain javascript?
- c++ - 为什么是 static_cast
无法将变量转换为 int - php - 如何在返回语句中获取“for or foreach”循环值作为回显语句获取
- c# - 在异步库方法中处理共享成员变量的推荐做法是什么?
- pyspark - Pyspark:如何为 df 中的某些选定列创建联合表