0

所以我有一个django项目的以下模型结构

class RawData(models.Model):
    user = models.ForeignKey(User)
    timestamp = models.DateTimeField()
    ...
    value = models.PositiveIntegerField()

class SummarizedData(models.Model):
    SUMMARY_DURATION = (
        ('H', 'Hour'),
        ('D', 'Day'),
        ('M', 'Month'),
        ('Y', 'Year')
    )
    user = models.ForeignKey(User)
    duration = models.CharField(max_length=1, choices=SUMMARY_DURATION)
    timestamp = models.DateTimeField()      #for keeping track of which duration's data is this
    ...
    min_max_values = models.ManyToManyField(RawData)

现在我的问题与 min_max_values 有关。我只希望每个 SummarizedData 有 2 个 RawData 元组——一个对应于该持续时间内看到的最小 RawData 值,另一个对应于该值的最大值。

然而,由于一个特定的 RawData 元组可能是多个 SummarizedData 条目的最小值(例如给定小时、同一天等),我通过多对多关系将它们关联起来。但是我无法弄清楚如何识别与 SummarizedData 相关的 2 个 RawData 值中的哪个是最大值,哪个是最小值,除非我比较它们各自的值。所以到目前为止,我将在 SummarizedData 中使用 getMaxValue 和 getMinValue 等函数。

我的问题是,对于这种特定情况,是否有可能以某种方式在 SummarizedData 中包含两个字段,每个字段对应一个 RawData 字段?也许像这样?

min_value = models.OneToOneField(RawData)
max_value = models.OneToOneField(RawData)

还是我应该采用我的第一种方法?

已编辑

抱歉,我应该使用 ForeignKey 而不是 OneToOneField

min_value = models.ForeignKey(RawData)
max_value = models.ForeignKey(RawData)
4

1 回答 1

2

由于以下原因,我认为您不应该将数据存储为 ManyToMany 字段:

  1. 您将不得不编写显式函数来确定哪些值是最小值,哪些是最大值
  2. 如果分别存储最小值或最大值,任何聚合操作(如平均值、求和、最小值、最大值)或排序等(如果以表格格式显示)都会更容易。

它将节省大量额外的计算,并且您将需要更少的代码行来执行所需的操作,因此我建议您对 min_value 和 max_value 使用单独的 ForeignKey 字段

min_value = models.ForeignKey(RawData)
max_value = models.ForeignKey(RawData)
于 2012-10-26T08:08:06.240 回答