【问题标题】:Django Save method needs to update model instance twiceDjango Save 方法需要两次更新模型实例
【发布时间】:2015-09-20 03:32:19
【问题描述】:

Django Save 方法需要更新模型实例两次才能工作。

应用程序具有以下保存方法来根据 ID 生成唯一 ID。

def save(self, *args, **kwargs):

    if self.id and not self.fid:
        self.fid = encode(self.id)

实际上它只有在模型实例被保存两次时才有效,第一个 FID 为 None。

【问题讨论】:

标签: python django model


【解决方案1】:
def save(self, *args, **kwargs):
    # save the instance, do this first so that we have an id
    super(MyModelClass, self).save(*args, **kwargs)
    # if it was a new instance fid is not set yet
    if self.id and not self.fid:
        self.fid = encode(self.id)
        # save the instance again now that we've set fid
        super(MyModelClass, self).save(*args, **kwargs)

【讨论】:

  • 底部有 Super(),移到上面好像已经修复了
  • 您将第二个super 呼叫移至何处?
  • 以防第二次保存由于被进一步覆盖而产生副作用,您可以将if 语句之后的代码替换为:MyModelClass.objects.filter(id=self.id).update(fid=encode(self.id))。看起来有点奇怪,但它绕过了save()
  • @Anentropic 你能帮忙解决类似的问题吗stackoverflow.com/questions/55384218/…
猜你喜欢
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
相关资源
最近更新 更多