我正在使用Python 3.7。在服务类中,我有这些语句......
article.first_appeared_date = datetime.now(timezone.utc)
article.save()
ArticleStat.objects.save_main_article(article)
第一对语句更新单个对象的属性,第二条语句使用第一个对象创建一堆单独的对象。我希望整个事情作为一个事务执行,这样一切都会成功,或者如果出现问题,数据库不会发生任何更改。我不清楚 Python 的最佳实践。这样的方法会去哪里呢?将其放入管理器类中是否可以使其具有事务性?
最佳答案
from django.db import transaction
with transaction.atomic():
article.first_appeared_date = datetime.now(timezone.utc)
article.save()
ArticleStat.objects.save_main_article(article)
您可以在某些模型中甚至在从服务调用的 View 中实现此方法。大多数时候,您希望将这样的代码放入某个 View (或在 View 中调用的函数)中。
但是,如果您想要的是每次保存
文章时执行ArticleStat.objects.save_main_article(article)
,您应该查看 Django signals ,具体来说post_save信号。
在此处查看交易文档:https://docs.djangoproject.com/en/2.1/topics/db/transactions/
关于python - 我应该如何以及在哪里创建此事务方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54281215/