Gor*_*ran 4 django django-models django-admin django-views
我有一些固定的数字,比如说num = 1000现在我有一个字段,它需要是 object.id 和 num 的总和。我需要在 save() 中使用它,如下所示。
def save(self, *args, **kwargs):
num = 1000
self.special = self.id + num
super(MyModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但 self.id 在保存后已知,并且需要名为special的字段。如何获取self.id?
首先?您尝试添加的号码是固定号码吗?如果是这样,为什么必须将其存储在数据库中?您可以为模型创建一个方法作为属性,并在需要时添加数字:
class ModelX(models.Model):
...
def special(self):
num = 1000
return self.id + num
Run Code Online (Sandbox Code Playgroud)
如果你确实需要将其存储到数据库中,你可能需要进行两次数据库访问,因为正如丹尼尔所说,在对象存储在数据库中之后你会得到id。
您可以将您的save方法修改为以下之一:
def save(self, *args, **kwargs):
num = 1000
self = super(MyModel, self).save(*args, **kwargs)
self.special = self.id + num
self.save()
Run Code Online (Sandbox Code Playgroud)
请注意,这可以通过在数据库中第一次创建对象时执行此操作来优化,其中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 = self.id + num
self.save()
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
5034 次 |
| 最近记录: |