【问题标题】:Django: `model.fk_id` isn't updated after `model.fk.save()`?Django:在`model.fk.save()`之后没有更新`model.fk_id`?
【发布时间】:2012-07-18 00:51:32
【问题描述】:

我有一个模型,当它保存时,如果它的一个外键不存在,它应该创建并保存它:

class MyModel(m.Model):
    fk = m.ForeignKey(AnotherModel)

    def save(self):
        if not self.fk_id:
            self.fk = AnotherModel()
            self.fk.save()
        return super(MyModel, self).save()

但是对super(MyModel, self).save() 的调用会引发错误,因为self.fk_id 仍然为空:

回溯(最近一次通话最后): ... 文件“.../models.py”,第 10 行,保存 return super(MyModel, self).save() ... 执行中的文件“.../django/db/backends/postgresql_psycopg2/base.py”,第 44 行 返回 self.cursor.execute(查询,参数) IntegrityError:“fk_id”列中的空值违反非空约束

注意:调试器显示self.fk.id 已正确设置,并且在添加self.fk_id = self.fk.id 后一切似乎都正常。

那么,我的问题是:为什么需要self.fk_id = self.fk.id?是否可以明确避免这样做?

【问题讨论】:

  • 为什么不在将 AnotherModel 对象分配给 self.fk 之前保存它?
  • @DanielRoseman 啊,没有考虑到这一点。我想这会起作用……但仍然没有“意义”。

标签: python django django-models django-1.3


【解决方案1】:

我认为this bug report 是您的答案。目前,您只需要在相关对象本身具有主键后对其进行设置。他们仍在讨论补丁。

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 2016-07-12
    • 2018-10-16
    • 2015-01-20
    • 2015-04-21
    • 2014-12-13
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多