Пример кода, показывающего проблему:
class Post(models.Model):
...
class Comment(models.Model):
...
post = models.ForeignKey(Post, related_name='comments',
on_delete=models.CASCADE, null=False)
post_comment_number = models.PositiveIntegerField(unique=True, null=False)
Скажем, каждый раз, когда мы создаем новый объект Comment для объекта Post, мы хотим присвоить полю post_comment_number значение, равное +1 от значения post_comment_number последнего комментария, созданного для того же объекта Post.
Я считаю, что выполнение следующих действий может привести к проблеме состояния гонки:
last_comment_for_post = Comment.objects.filter(post=post).order_by('-post_comment_number')[0]
comment = comment_form.save(commit=False)
comment.post_comment_number = last_comment_for_post.post_comment_number + 1
comment.save()
Как мы можем сделать это потокобезопасным способом, который не приведет к проблеме состояния гонки?