我正在构建一个管理日期的应用程序,特别是事件的重现。我正在使用Django-Rest-Framework for api。 该模型由规则集和附加到规则集的0个或多个规则组成:
class RecurrenceRuleset(models.Model):
id = models.AutoField(primary_key=True, name='id', db_column='id')
summary = models.TextField(null=True, blank=True, default="")
rdates = models.TextField(blank=True, default="")
exdates = models.TextField(blank=True, default="")
calculated_mindate = models.DateTimeField(blank=True, null=True)
calculated_maxdate = models.DateTimeField(blank=True, null=True)
class RecurrenceRule(models.Model):
id = models.AutoField(primary_key=True, name='id', db_column='id')
ruleset = models.ForeignKey(RecurrenceRuleset, blank=True, null=True, db_column='parent_ruleset_id', related_name='recurrence_rules')
summary = models.TextField(null=True, blank=True, default="")
type = models.CharField(max_length=20) # RRULE, EXRULE
frequency = models.CharField(max_length=20) # YEARLY, MONTHLY etc
# ... A lot of other model params
由于我经常需要在特定日期范围内请求事件,因此如果特定规则集在给定日期范围内具有日期,我不希望在每个GET消息中重新计算。
作为一种简单的优化,我将在规则集中存储“calculated_mindate / maxdate”字段,并仅查询适合我的查询日期范围的规则集。当然,我仍然需要进行计算以检查确切的事件,但它将是整个表的更短的列表。但是,这意味着我需要更新对象的每个post / put / patch处的“计算”字段。
我只会使用嵌套规则公开规则集对象。我想知道把这些领域的微积分放在哪里的最佳位置。我看到两个候选人: - 在我的视图中覆盖post_save - 覆盖序列化程序中的restore_object
我倾向于restore_object解决方案,因为如果RecurrenceRuleset对象本身可以嵌套在另一个对象中,这也将成立。但是,这使我使用instance._related_data。
对此有何想法?