关于python:Django:`model.fk_id`在`model.fk.save()之后没有更新?

Django: `model.fk_id` isn't updated after `model.fk.save()`?

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

1
2
3
4
5
6
7
8
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仍然为空:

1
2
3
4
5
6
7
8
Traceback (most recent call last):
  ...
  File".../models.py", line 10, in save
    return super(MyModel, self).save()
  ...
  File".../django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
    return self.cursor.execute(query, args)
IntegrityError: null value in column"fk_id" violates not-null constraint

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

所以,我的问题是:为什么需要self.fk_id = self.fk.id?有没有可能避免这样做?


我认为这个错误报告是你的答案。目前,您只需要在相关对象拥有主键之后设置它。他们还在讨论补丁。