保存到数据库后自动更新模型关系

时间:2018-10-24 07:28:33

标签: django django-models

假设我有以下两个Django模型AB

class A(models.Model):
    pass

class B(models.Model):
    a = models.ForeignKey('A', on_delete=models.CASCADE)

我想实例化它们两个,然后通过以下方式将它们保存到数据库中:

# Code sample 1
a = A()
b = B()
b.a = a
# Do something with b.a, e.g. b.a.some_method()
a.save()
b.save()

尽管ab之前已保存到数据库,因此已经具有ID,但是b.save()将失败,并显示IntegrityError

IntegrityError: null value in column "a_id" violates not-null constraint
DETAIL:  Failing row contains (1, null).

作为“替代方法”,可以在调用a之前将b分配给b.save()

# Code sample 2
a = A()
b = B()
b.a = a
# Do something with b.a, e.g. b.a.some_method()
a.save()
b.a = a
b.save()

这有效,但是似乎不得不将a分配给b两次是多余的。感觉b应该知道a已更改或已保存到数据库。有没有办法使代码示例1正常工作?

1 个答案:

答案 0 :(得分:0)

您不必将a分配给b两次。尝试以下方法:

a = A()
a.save()

b = B()
b.a = a
b.save()

这将起作用,因为仅在调用save()时才分配模型对象的主键。分配外键时,默认情况下使用主键。