Вопрос, честно говоря, довольно понятен.У меня есть 2 модели, которые связаны между собой.Это выглядит так:
from django.db import IntegrityError, transaction
class Item(models.Model):
total_score = models.IntegerField()
def set_score(self):
...
class Review(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
score = models.IntegerField()
def save(self, *args, **kwargs):
try:
with transaction.atomic():
super(Review, self).save(*args, **kwargs)
self.item.set_score()
except IntegrityError:
handle_exception()
По сути, всякий раз, когда отзыв сохраняется, оценка его элемента обновляется с использованием метода set_score()
.Я поместил все это в атомарную транзакцию, потому что, очевидно, я не хочу, чтобы обзор обновлялся, а оценка элемента оставалась неизменной.Это как питательная среда для потенциальных ошибок.В любом случае, это правильный способ сделать это?Я чувствую, что у меня нет возможности проверить это на моем локальном сервере, так как невозможно создать ошибку, которая сохраняет обзор, но не обновляет счет.Спасибо.
Примечание. Я знаю, что есть более эффективные способы оценки балла за предмет на основе его отзывов.Это не суть вопроса.Это выдуманный сценарий, чтобы объяснить, что я хочу сделать.Так что, пожалуйста, никаких ответов об этом.