Нет, нет ничего особенного в сигналах в отношении транзакций базы данных (единственный вид атомарности, обрабатываемый Django). Вы должны убедиться, что соответствующие команды всегда являются частью одной и той же транзакции базы данных.
Один из подходов состоит в том, чтобы просто полагаться на вызывающий код, чтобы сделать это, используя ATOMIC_REQUESTS
, используя транзакции в ваших представлениях и т. Д.
Или, поскольку post_save
сигналы отправляются как часть Model.save()
, вы можете просто переопределить Review.save()
и заставить его использовать транзакцию.
class Review(models.Model):
...
@transaction.atomic()
def save(*args, **kwargs):
super().save(*args, **kwargs)