我有一些固定的数字,让它说是num = 1000
现在我有一个字段需要是object.id和num的总和。我在save()中需要这个,如下所示。
def save(self, *args, **kwargs):
num = 1000
self.special = self.id + num
super(MyModel, self).save(*args, **kwargs)
但是self.id在save之后是已知的,并且需要名为special的字段。如何获得self.id?
答案 0 :(得分:2)
首先?您尝试添加固定号码的号码是多少?如果是这样,为什么你必须将它存储在数据库中呢?您可以为模型创建一个作为属性的方法,并在需要时添加数字:
class ModelX(models.Model):
...
def special(self):
num = 1000
return self.id + num
如果你真的需要将它存储到数据库中,你可能需要进行两次数据库访问,因为正如Daniel所说,在对象存储在数据库中后你得到了id。
您可以将save
方法修改为此方法:
def save(self, *args, **kwargs):
num = 1000
self = super(MyModel, self).save(*args, **kwargs)
self.special = obj.id + num
self.save()
请注意,这可以通过在数据库中第一次创建对象时进行优化,其中self.special
为NULL
或默认值,具体取决于您声明模型的方式。
def save(self, *args, **kwargs):
num = 1000
self = super(MyModel, self).save(*args, **kwargs)
# self.special is null, (creating the object in the db for the 1st time)
if not self.special: # or if self.special != defaultvalue (defined in MyModel)
self.special = obj.id + num
self.save()
我希望这会有所帮助。