Таким образом, ситуация такова: у меня есть конечная точка A
, которая создает данные и вызывает .save () для этих данных (вызовите это functionA
), который также отправляет запрос на публикацию во внешний сторонний API, который будет вызыватьмоя конечная точка B
(назовите это functionB
)
def functionA():
try:
with transaction.atomic()
newData = Blog(title="new blog")
newData.save()
# findSavedBlog = Blog.objects.get(title="new blog")
# print(findSavedBlog)
r = requests.post('www.thirdpartyapi.com/confirm_blog_creation/', some_data) # this post request will trigger the third party to send a post request to endpoint calling functionB
return HttpResponse("Result was: " + r.status)
def functionB():
blogTitle = request.POST.get('blog_title') # assume this evaluates to 'new blog'
# sleep(20)
try:
findBlog = Blog.objects.get(title=blogTitle) # again this will be the same as Blog.objects.get(title="new blog")
except ObjectDoesNotExist as e:
print("Blog not found!")
Если я раскомментирую часть findSavedBlog
функции A, она напечатает сохраненный блог, но функция B все равно не будет работать.
Если я добавлю sleep
к функции B, чтобы дождаться, пока БД завершит запись, а затем попытаться извлечь вновь созданные данные, это все равно не удастся.
Любой, кто знаком с Джанго. Метод save () и / или некоторые знания параллелизма помогут мне здесь? Очень признателен. Спасибо!
РЕДАКТИРОВАТЬ: Проблема заключалась в том, что я обернул всю функцию A в атомарный блок (изначально забыл написать эту часть функции A), что означало, что транзакции не фиксируютсядо тех пор, пока не вернется функция A!