首页 > 解决方案 > 在 transaction.atomic() 中创建期间未抛出 IntegrityError

问题描述

我想创建一个带有 FK 到引擎的汽车。我还想将记录保存到已创建 Car 的审计表中;我在该审计记录中包含了引擎的 ID。

我正在使用 Django Rest 框架。这是我的“创建”序列化程序代码:

@transaction.atomic
def create(self, validated_data):
    try:
        with transaction.atomic():
            car = Car.objects.create(**validated_data)
    except Exception as e:
        raise serializers.ValidationError("my message")
    a_function_that_creates_an_audit_record()

问题是,如果engine_id=0invalidated_data并且没有Engine对象的 anid为 0,则 noException被抛出,并且except ...不会被触发。执行继续a_function_that_creates_an_audit_record(),在那里我做了类似的事情car.engine.id,在那里我得到了一个 IntegrityError ,说Engineanid为 0 不存在。

按照这里的文档

做错了什么?有什么我想念的吗?

标签: djangodjango-rest-frameworktransactions

解决方案


推荐阅读