0

我有一个名为的模型,它与一个关系Calculation相连。第一次创建模型对象时,我想启动某个字典。稍后我填写值并保存对象。MeasureOneToManyCalculation

从数据库加载对象时不应创建字典,并且在我发出save().

我对 Signals ( 1 ) 和 Factories ( 1 , 2 ) 感到不满,但我仍然对如何实现这一点感到有些困惑。

模型.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函数,但没有用。

**姜戈新手。谢谢。

4

1 回答 1

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。相关文档在这里

于 2013-09-01T15:58:03.927 回答