具有嵌套对象的保存后挂钩的最佳位置

时间:2014-03-17 16:12:31

标签: django django-rest-framework

我正在构建一个管理日期的应用程序,特别是事件的重现。我正在使用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。

对此有何想法?

0 个答案:

没有答案