回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><strong>编辑</strong>:添加所有相关模型。补充说明。你知道吗</p>
<p>我必须查询一个名为<strong>Data</strong>的表,但不是只返回一个列表,而是可能从一个查询返回多个列表。否则,获取queryset结果并将其分解为具有公共<strong>SensorParameter</strong>字段的对象数组。你知道吗</p>
<p>我有模型数据:</p>
<pre><code>class Data(models.Model):
sensor_param = models.ForeignKey(SensorParameter, on_delete=models.CASCADE)
time = models.DateTimeField(db_index=True)
value = models.FloatField()
</code></pre>
<p>模型<strong>传感器参数<strong>与参数(温度、振动等)和传感器实例(序列号等)有链接:</p>
<pre><code>class SensorParameter(models.Model):
sensor = models.ForeignKey(Sensor)
parameter = models.ForeignKey(Parameter)
</code></pre>
<p>型号<strong>参数<strong>(不同传感器可能测量的不同类型参数的容器):</p>
<pre><code>class Parameter(models.Model):
parameter_name = models.CharField(max_length=50)
parameter_unit = models.CharField(max_length=20, blank=True)
</code></pre>
<p>最后是一个将所有其他传感器连接在一起的传感器:</p>
<pre><code>class Sensor(models.Model):
name = models.CharField(max_length=50, null=False, blank=True)
serial_number = models.CharField(max_length=50)
sensor_type = models.ForeignKey(SensorType)
</code></pre>
<p>我可以从某个传感器查询某个时间范围内的<strong>数据</strong>表,方法是执行双重向后查找,并按我希望的方式对结果查询排序,首先按<strong>传感器\u参数</strong>,然后按<strong>时间</strong>:</p>
<pre><code>sensor = Sensor.objects.get(serial_number=request["data_source"])
range_period = [request['start'], request['end']]
# This is the queryset I have now, though it's not set in stone
data_query = Data.objects.filter(sensor_parameter__sensor=sensor, time__range=range_period).order_by('sensor_parameter', 'time')
</code></pre>
<p>这将在<strong>一个大列表</strong>中列出请求的时间段内请求的传感器的所有数据点。你知道吗</p>
<p>然后,如何将结果列表分解为具有公共<strong>SensorParameter</strong>字段的多个对象列表(或数组)?你知道吗</p>
<p>示例来自:</p>
<pre><code>queryset_overall_result =
[
{data_point_1: sensor: X, sensor_parameter: temp, value: 188, time: 00:01}
{data_point_2: sensor: X, sensor_parameter: vibration, value: 5, time: 00:01}
{data_point_3: sensor: X, sensor_parameter: temp, value: 185, time: 00:02}
{data_point_4: sensor: X, sensor_parameter: vibration, value: 6, time: 00:02}
]
</code></pre>
<p>收件人:</p>
<pre><code>list_temp =
[
{data_point_1: sensor: X, sensor_parameter: temp, value: 188, time: 00:01}
{data_point_3: sensor: X, sensor_parameter: temp, value: 185, time: 00:02}
]
list_vibration =
[
{data_point_2: sensor: X, sensor_parameter: vibration, value: 5, time: 00:01}
{data_point_4: sensor: X, sensor_parameter: vibration, value: 6, time: 00:02}
]
</code></pre>
<p>有没有更好的方法来查询数据表,以便在过滤到另一个表时,给我提供按时间排列的多个列表?(传感器参数)</p>
<p>或者使用python将整个queryset结果分解为公共对象元素的多个列表?阵列是理想的,但不确定如何实现这一点。你知道吗</p>
<p>理想情景:</p>
<pre><code>array =
[
[
{data_point_1: sensor: X, sensor_parameter: temp, value: 188, time: 00:01}
{data_point_3: sensor: X, sensor_parameter: temp, value: 185, time: 00:02}
]
,
[
{data_point_2: sensor: X, sensor_parameter: vibration, value: 5, time: 00:01}
{data_point_4: sensor: X, sensor_parameter: vibration, value: 6, time: 00:02}
]
]
</code></pre>
<p>限制条件:我不知道一个<strong>传感器可以测量多少个或哪些<strong>传感器参数,根据<strong>传感器类型,可以是4到45英寸。我需要尽量减少查询,因为这个查询可能会返回大量数据,并且可能会连续发生多次。DB命中率越低越好。你知道吗</p>