我有一个简单的网络应用程序,上面有帖子和评论。
对于帖子上的每个评论者,我想根据他们面前的不同评论者的数量为他们分配一个标识符(评论者1,评论者2等)。
这是我最初的尝试:
comment = Comment.objects.create(**data)
comment.user_identifier = comment.post.comments.distinct('author').count() + 1
comment.save()
有效,但会导致竞争条件,如果同时创建两个注释,则它们具有相同的标识符。避免这种情况的最佳方法是什么?
答案 0 :(得分:1)
这基本上是重复的
Avoiding race conditions, Django + Heroku + PostgreSQL
所以通常你必须使用.select_for_update()
来避免问题
https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-for-update