我正在使用Python 3.7。在服务类中,我有以下语句...
article.first_appeared_date = datetime.now(timezone.utc)
article.save()
ArticleStat.objects.save_main_article(article)
第一对语句更新单个对象的属性,第二对语句使用第一个对象创建一堆单独的对象。我想要的是将整个事情作为事务执行,从而一切都成功了,或者如果某件事失败了,则不会对数据库进行任何更改。我不清楚Python的最佳做法。这样的方法会去哪儿?放在管理器类中是否使其具有事务性?
答案 0 :(得分:0)
from django.db import transaction
with transaction.atomic():
article.first_appeared_date = datetime.now(timezone.utc)
article.save()
ArticleStat.objects.save_main_article(article)
您可以在某些模型中甚至从服务调用的视图中实现此目的的方法。大多数时候,您希望将这样的代码放在某个视图中(或在视图中调用的函数)。
但是,如果您想要的是每次ArticleStat.objects.save_main_article(article)
都执行save
,则应该查看Django signals,特别是post_save信号。
在此处查看交易文档:https://docs.djangoproject.com/en/2.1/topics/db/transactions/