django-在pre_save

时间:2019-09-22 01:20:15

标签: django django-orm django-signals

我正在尝试在pre_save方法中设置不可为空的OneToOneField对象(尚未设置)。

class A(Model):
    b = models.OneToOneField(B, on_delete=CASCADE)

    @staticmethod
    def pre_save(sender, instance, **kwargs):
        try:
            instance.b
        except RelatedObjectDoesNotExist:
            instance.b = B()
            instance.b.save()

pre_save.connect(A.pre_save, A)

即使创建了B对象并将其存储在数据库中,我也会收到此错误,好像A对象没有指向B

django.db.utils.IntegrityError: NOT NULL constraint failed: app_a.b_id

如果我在字段定义中设置了null=True,那么我当然不会遇到NOT NULL constraint failed错误。但是,A对象仍然不存储对B对象的引用。

我猜这是因为在原始的A对象中没有B引用,所以当以某种方式执行save时,它不认为应该保存b属性。

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:0)

所以,我找到了问题的根源!

在保存对象之前分配对象时,会发生此错误。如果您保存对象并在以后分配它,它将正确保存该对象:

using Emgu.CV.UI;
using System.Drawing;
using System.Diagnostics;