Django从Count中分配ID:避免竞争条件

时间:2017-03-06 22:54:12

标签: django

我有一个简单的网络应用程序,上面有帖子和评论。

对于帖子上的每个评论者,我想根据他们面前的不同评论者的数量为他们分配一个标识符(评论者1,评论者2等)。

这是我最初的尝试:

comment = Comment.objects.create(**data)
comment.user_identifier = comment.post.comments.distinct('author').count() + 1
comment.save()

有效,但会导致竞争条件,如果同时创建两个注释,则它们具有相同的标识符。避免这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这基本上是重复的

Avoiding race conditions, Django + Heroku + PostgreSQL

所以通常你必须使用.select_for_update()来避免问题

https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-for-update