【发布时间】:2019-08-03 18:09:39
【问题描述】:
我正在为水文学家编写网络界面。水文学家应该像这样查看具有不同水文测量值的表格。
+----------------+----------------------+-------+--------------------+-------------+------------------+
| observation_id | observation_datetime | level | water_temperature |precipitation|precipitation_type|
+----------------+----------------------+-------+--------------------+-------------+------------------+
| 1 | 2019-03-11 11:00:00 | 11 | 21 | 31 |
| 2 | 2019-03-12 12:00:00 | 12 | 22 | 32 |
| 3 | 2019-03-13 13:00:00 | 13 | 23 | 33 |
| 4 | 2019-03-14 14:00:00 | 14 | 24 | 34 |
我有这些模型来描述测量结果
class AbstractMeasurement(model.Model):
observation_datetime = models.DateTimeField()
observation = models.ForeignKey(Observation, on_delete = models.DO_NOTHING)
class Meta:
abstract = True
class Level(AbstractMeasurement):
level = models.DecimalField()
class WaterTemperature(AbstractMeasurement):
air_temperature = models.DecimalField()
class Precipitation(AbstractMeasurement):
precipitation = models.DecimalField()
precipitation_type = models.CharField()
等等
水平主要测量和测量不能没有水平。级别是基本模型。
在mysql中我可以通过这个查询来完成
SELECT level.observation_id,
level.observation_datetime,
level.level,
water_temperature.water_temperature,
precipitation.precipitation,
precipitation.precipitation_type
FROM level
LEFT JOIN precipitation ON
level.observation_datetime = precipitation.observation_datetime
AND
level.observation_id = precipitation.observation_id
LEFT JOIN water_temperature ON
level.observation_datetime = water_temperature.observation_datetime
AND
level.observation_id = water_temperature.observation_id;
如何在 django 中使用没有外键关系的模型进行 LEFT JOIN?
【问题讨论】:
-
你能在没有 FK 的情况下使用任何数据库吗?
-
你能详细说明
Observation和Measurement的区别以及两者之间的关系吗? -
一旦你的数据结构清晰了,在 Django 中找到表现良好的表示应该不难。
-
Observation包含有关水文站和观察者的信息。测量是水位、水温等。我将更改我的模型,将所有测量值合并到Measurement模型中
标签: django django-models django-orm