【发布时间】:2013-06-14 18:57:09
【问题描述】:
我遇到了一个创建多个数据库对象的问题,而我只期望一个。
我的应用程序模型由 Form 和 Fields 集合和 FormEntry 和 FieldEntries 集合组成。对于给定的FormEntry,我只希望每个字段有一个FieldEntry。
这是我的问题:我的 UI 使用 ajax 提交字段条目。处理提交的 Django 代码执行 FieldEntry.objects.get_or_create() 来创建条目,但似乎我有某种竞争条件:如果两个 ajax 快速连续调用触发(一旦字段失去焦点它们就会触发),似乎第二个get_or_create() 可以在第一个完成之前发生,创建两个对象。我已添加代码以在比赛结束后进行清理,但如果该字段没有再次更新,则代码将不会运行。公平地说,我不确定这是否是导致我的多重创建问题的机制。
问题是如何最好地防止这种情况发生?我可以在 JS 中实现某种资源锁,以确保在同一字段的先前更新完成之前不会发生字段更新,但我不知道如何在 JS 中优雅地“延迟”直到锁可用.
我也可以在 Django/python 中实现锁,但我认为这更复杂。
【问题讨论】:
标签: javascript python django asynchronous