【问题标题】:Django Get ID of the object in save()Django 在 save() 中获取对象的 ID
【发布时间】:2013-05-21 03:10:25
【问题描述】:

我有一些固定的数字,假设它是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 在保存后是已知的,并且需要名为 special 的字段。如何获取self.id?

【问题讨论】:

    标签: django django-models django-admin django-views


    【解决方案1】:

    首先?您要添加的号码是固定号码吗?如果是这样,为什么你必须将它存储在数据库中?您可以为您的模型创建一个方法,该方法用作属性并在需要时添加数字:

    class ModelX(models.Model):
        ...
        def special(self):
            num = 1000
            return self.id + num
    

    如果您确实需要将其存储到数据库中,您可能需要进行两次数据库访问,因为正如丹尼尔所说,您在对象存储到数据库后获取 id。

    您可以将您的save 方法修改为这个:

    def save(self, *args, **kwargs):
        num = 1000
        self = super(MyModel, self).save(*args, **kwargs)
        self.special = self.id + num
        self.save()
    

    请注意,这可以通过在数据库中第一次创建对象时进行优化,其中 self.specialNULL 或默认值,具体取决于您声明模型的方式。

    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()
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-08-05
      • 2012-05-20
      • 2012-06-30
      • 2014-05-30
      • 2019-09-17
      • 1970-01-01
      • 2011-12-30
      • 2022-11-29
      • 2022-01-19
      相关资源
      最近更新 更多