首次创建时模型的初始成员

时间:2013-09-01 15:49:15

标签: django

我有一个名为Calculation的模型,该模型与MeasureOneToMany关系。 当我第一次创建Calculation模型对象时,我想要发起某个字典。稍后我会填写值并保存对象。

从DB加载对象时,不应创建dict 在我发出save()之前,不应该保存到数据库中。

我对于信号(1)和工厂(12)很感兴趣,但我仍然对如何实现这一点感到困惑。

models.py

class Calculation(models.Model):
    measure = models.ForeignKey(Measure)
    modified_time = models.DateTimeField(auto_now = True)
    raw_parameters = hstore.DictionaryField(db_index=True, null=True)
    result = models.DecimalField(null=True,max_digits=15, decimal_places=2)

    def __init__(self, *args, **kwargs):
        # init the relation
        super(Calculation, self).__init__(*args, **kwargs)
        # init a list of required parameters with empty values
        self.raw_parameters = dict((k,None) for k in self.measure.parameters.all().values_list('name',flat=True))

现在的方式并不好,因为它还会在加载现有对象时执行,并覆盖raw_parameters中的现有值。 我已经尝试重载create函数,但它没有用。

** Django newbi。感谢。

1 个答案:

答案 0 :(得分:0)

如果您打算覆盖模型的“创建”功能,则必须在实例的save未设置时覆盖id方法。

在你的情况下,代码将是这样的:

class Calculation(models.Model):
    # your fields

    def save(self, *args, **kwargs):
        if self.pk is None:
            # your "on create only" logic here
            # ...
        super(Calculation, self).save(*args, **kwargs)

仅在使用未分配的pk保存新创建的对象时,才会调用“仅在创建时”代码。相关文档here