Django模型管理器事务和信号

时间:2017-10-16 04:24:45

标签: python django django-models transactions

# The model
class UserManager(models.Manager):
    def create_user(self, temp_user_id):
        new_user = self.create(require data)
        # insert row to model B

# The model manager
class User(models.Model):
    # model fields

    objects = UserManager()

# Post save signal handler
def send_notification_to_user(sender, instance, created, **kwargs):
    # send sms notification to the newly created user


signals.post_save.connect(send_notification_to_user, sender=User)


# The view
class UserView(APIView):
    def post(self, request, format=None):
        try:
            with transaction.atomic():
                c_user = User.objects.create_user(request.data["temp_reg_id"])
                return Response(status=status.HTTP_201_CREATED)
        except Exception as e:
            return Response(status=status.HTTP_400_BAD_REQUEST)

在这种情况下,如果用户注册,则用户获得短信。但是在这里我在事务中运行模型管理器,所以如果以某种方式#插入行到模型B指令失败,那么所有数据库都将回滚。问题是在这种情况下用户将获得帐户创建短信,这是不正确的。我怎样才能克服这个问题或哪种方法会更好?我的英语不好,你可以问我更多解释。

0 个答案:

没有答案