我有一个名为Calculation
的模型,该模型与Measure
有OneToMany
关系。
当我第一次创建Calculation
模型对象时,我想要发起某个字典。稍后我会填写值并保存对象。
从DB加载对象时,不应创建dict
在我发出save()
之前,不应该保存到数据库中。
我对于信号(1)和工厂(1,2)很感兴趣,但我仍然对如何实现这一点感到困惑。
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。感谢。
答案 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。