javascript - Django:防止重复对象创建的策略

标签 javascript python django asynchronous

当我只期望创建一个数据库对象时,我遇到了创建多个数据库对象的问题。

我的应用程序模型由一个带有 Fields 集合的 Form 和带有 FieldEntries 集合的 FormEntry 组成。.对于给定的 FormEntry,我只希望每个字段有一个 FieldEntry

这是我的问题:我的 UI 使用 ajax 提交字段条目。处理提交的 Django 代码使用 FieldEntry.objects.get_or_create() 来创建一个条目,但似乎我有某种竞争条件:如果两个 ajax 调用快速连续触发(它们触发为一旦字段失去焦点),似乎第二个 get_or_create() 可能会在第一个完成之前发生,创建两个对象。我添加了代码来在比赛后进行清理,但是如果该字段没有再次更新,则该代码将不会运行。公平地说,我什至不确定这是否是导致我的多重创建问题的机制。

问题是如何最好地防止这种情况发生?我可以在 JS 中实现某种资源锁,以确保在同一字段上的先前更新完成之前不会发生字段更新,但我不知道如何在 JS 中优雅地“延迟”直到锁可用.

我也可以在 Django/python 中实现锁,但我认为这更复杂。

最佳答案

在您的模型字段定义集中unique=True

my_field = models.ForeignKey('any_model', unique=True)

这将确保 any_model 没有重复条目。

关于javascript - Django:防止重复对象创建的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17115462/

相关文章:

javascript - 如何确保在禁用时提交 <select> 表单字段?

javascript - 如何匹配javascript正则表达式中字符之间的字符串

python - Django 不解析自定义的 http 接受 header

django - 将 memcached 用作 Django 的 cached_db session 设置的缓存后端时控制其超时

css - 使 css 色带仅出现在来自 django 数据库的选定图像上

javascript - 获取数组中多个html对象的id

javascript - 使用ajax调用时如何实现next/back函数?

python - 函数 np.interp 和 pandas Python 出错

Python 和从图中删除注释

python - RSA 编码和解码 [e,d]。在 python 中查找 e 和 d.. 更新