Django - 延迟创建数据库条目

时间:2016-10-15 14:02:17

标签: python django postgresql

我有一个Django应用程序,我在视图中创建了一个db条目。然后我想对新条目执行后台处理。我不是将创建的对象发送到任务,而是发送对象的id,然后后台任务可以按照here的说明获取db对象。以下是我的代码:

# In tasks.py
@shared_task
def my_task(model_id):
    my_model = MyModel.objects.get(pk=model_id)
    # Do stuff with my_model

# In views.py:
def some_view(request):
    if request.method == 'POST' and request.is_ajax():
        instance = MyModel.objects.create(**kwargs)
        tasks.my_task.delay(instance.id)
        ....

但是,当我尝试在后台任务中获取对象时,我得到匹配查询不存在错误。如果我在获取对象之前添加sleep(1),则它将作为例外工作。我不明白为什么我收到这个错误,因为对象应该在DB中?有人知道如何解决这个问题吗?我真的不想在任何地方添加一个睡眠命令。

我正在使用Postgres作为我的数据库。

1 个答案:

答案 0 :(得分:2)

试试这个

from django.db import transaction
with transaction.atomic():
    instance = MyModel.objects.create(**kwargs)
tasks.my_task.delay(instance.id)
相关问题