Django模型无法通过Save_Model方法保存更改



我已经覆盖了admin save_model函数,以根据我添加到管理站点的自定义按钮来执行一些额外的逻辑。save_model功能如下:

def save_model(self, request, obj, form, change):
    obj.last_updated = timezone.now()
    send_request = False
    if request.method == 'POST' and "text_gig" in request.POST:
        if not obj.status:
            obj.status = Event.APPROVED
            send_request = True 
            messages.success(request, 'Event has been approved and tweeted!')
        elif _check_tweet(request, form, obj):
            if change:
                obj.tweet = form.cleaned_data.get('tweet')
            send_request = True
            messages.success(request, 'Event has been tweeted!')
        obj.save()
        if send_request:
            send_text.delay(obj.id, phone=False)

实例的" last_updated"应更改为当前时间,"状态"字段应从null设置为定义常数。但是,这没有发生。我知道代码流是正确的,因为我收到"已获得批准和发推文!"消息,并且因为我的" send_text"任务正在触发。此外,我从调试日志中输出显示SQL更新:

UPDATE `booking_event` SET `reference` = '046A', `recorded` = '2017-02-26 15:59:29', `customer_id` = 1, `start` = '2017-02-28 17:00:00', `end` = '2017-02-28 20:00:00', `num_bartenders` = 1, `rate` = '20.00', `location` = 'xxx', `attendees` = 100, `description` = 'dsd', `special_requests` = 'dsd', `minimum_training_id` = 2, `contracted` = NULL, `assigned` = NULL, `signed` = NULL, `last_updated` = '2017-02-26 16:16:12', `agreement_id` = NULL, `tweet` = '046A: Tuesday 02/28, 12:00 PM-03:00 PM. 1B. xxx', `last_tweeted` = '2017-02-26 16:14:54', `contract_number` = 0, `status` = 1, `echosign_used` = 0, `booked_as_name` = 'xxx', `booked_as_phone` = 'xxx' WHERE `booking_event`.`id` = 46; args=(u'046A', u'2017-02-26 15:59:29', 1, u'2017-02-28 17:00:00', u'2017-02-28 20:00:00', 1, u'20.00', u'xxx', 100, u'dsd', u'dsd', 2, u'2017-02-26 16:16:12', u'046A: Tuesday 02/28, 12:00 PM-03:00 PM. 1B. xxx', u'2017-02-26 16:14:54', 0, 1, False, u'xxx', u'xxx', 46)

请注意,此处的"状态"设置为1。但是,当我浏览实例的更改表单时,"状态"又回到了null。这是超级令人困惑的,因为SQL清楚地表明它正在执行更新查询,并将"状态"集为1。

当我加载外壳并手动进行更改时,它起作用。我觉得我缺少一些明显的东西,但无法弄清楚!谢谢!

----更新------

我更靠近源,并在数据库上启用了交易记录。这些日志的转储显示了正在恢复我更改的第二个更新调用!

UPDATE `booking_event` SET `reference` = '046A', `recorded` = '2017-02-26 15:59:29', `customer_id` = 1, `start` = '2017-02-28 17:00:00', `end` = '2017-02-28 20:00:00', `num_bartenders` = 1, `rate` = '20.00', `location` = 'xxx', `attendees` = 100, `description` = 'dsd', `special_requests` = 'dsd', `minimum_training_id` = 2, `contracted` = NULL, `assigned` = NULL, `signed` = NULL, `last_updated` = '2017-02-26 16:03:01', `agreement_id` = NULL, `tweet` = 'xxx', `last_tweeted` = '2017-02-26 16:36:48', `contract_number` = 0, `status` = NULL, `echosign_used` = 0, `booked_as_name` = 'xxx', `booked_as_phone` = 'xxx' WHERE `booking_event`.`id` = 46

请注意"状态"如何回到null以进行此查询。知道是什么原因导致查询执行?

我自己弄清楚了:)我要派遣的" send_text"任务也称为实例的save()方法,该方法引入了种族条件。如果任务在保存完成之前获取了实例,则状态将被覆盖。

我通过将所有保存逻辑移动到admin save_model方法。

来解决此问题。