所以我有一个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条目的最小值(对于给定的hr,同一天等的ex),我通过manytomany关系将它们关联起来。但我无法弄清楚如何识别与SummarizedData相关的2个RawData值中的哪一个是最大值,哪个是min,除非我比较它们各自的值。所以到目前为止,我将使用SummarizedData中的函数,如getMaxValue和getMinValue。
我的问题是,对于这样一个特定情况,是不是可能以某种方式在SummarizedData中包含2个字段,每个字段对应一个RawData字段?也许是这样的?
min_value = models.OneToOneField(RawData)
max_value = models.OneToOneField(RawData)
或者我应该采用第一种方法?
抱歉,我应该使用ForeignKey而不是OneToOneField
min_value = models.ForeignKey(RawData)
max_value = models.ForeignKey(RawData)
答案 0 :(得分:2)
由于以下原因,我认为您不应将数据存储为ManyToMany字段:
它将节省大量额外的计算,你需要更少的代码行来完成所需的操作,所以我建议你为min_value和max_value使用单独的ForeignKey字段
min_value = models.ForeignKey(RawData)
max_value = models.ForeignKey(RawData)